Python for Entrepreneurs Transcripts
Chapter: Web design foundations
Lecture: Concept: Cache busting
0:01 Let's quickly review this concept of cache busting. Recall we'd started out with the white site with black text
0:08 and it looked like this, more or less and then we made a change, we wanted to say "switch it", so we had light text and a dark background,
0:17 without the cache busting in place well, remember that basically had no effect,
0:21 at least under certain circumstances, not the least of which is in production. So we added this cache id query string parameter to our CSS files,
0:32 so "?cacheId=whatever", right, you can put anything after the query string question mark there, and we wrote a function called build_cache_id
0:41 and it looks at the contents of the file and it creates an md5 hash which has the really nice property of - it's pretty short and it changes
0:49 if and only if the contents of that file change. So basically, every time we change a file, we get a new URL
0:55 that also gets aggressively cached but it doesn't matter to anybody because it's always caching the new one.
1:01 So now with this in place, we no longer have that problem, when we deploy a new version or just continue to use the site
1:08 it automatically adapts to the new CSS, regardless of what the cache settings are
1:13 and they should be extremely aggressive in production on that static folder. Here is the code that we wrote in sort of simplistic,
1:20 "help you understand what is going on" version, we used the dunder name to create the full path, and then we took a relative file URL,
1:28 this is basically a web relative path, and we used out full path and a little bit of os path juggling
1:35 to come up with a local file name, verify that that worked and then we just computed the hash with our md5 hash there and returned hash digest.
1:43 Now I said in production, we really should use a dictionary and recompute this only if we'd never seen the file before for that run of the process,
1:52 so I've included in the demo code the file called static_cache.py, which is a much more production-friendly version.
2:00 It's not identical to the one we'll have in the final product, it's not identical to the one I am using on my websites, but it's really close.