[#] Дорабатываем HTTP-кеширование в Django
habrabot(difrex,1) — All
2016-07-25 15:00:04


[![image][1]][2]
В этой заметке речь пойдет о [HTTP-кэшировании][3] ([перевод][4]) и его использовании совместно с фреймворком Django. Мало кто будет спорить с утверждением о том, что применение HTTP-кэширования — очень правильная и разумная практика разработки веб-приложений. Однако именно в этом функционале Django содержит ряд ошибок и неточностей, которые очень сильно ограничивают практическую пользу от такого подхода. Например, до сих пор актуален баг [\#15855][5], заведенный в апреле 2011 года, который может приводить к очень неприятным ошибкам в работе веб-приложения.


## Middleware vs. explicit decorator


В Django есть два стандартных способа включения HTTP-кэширования: через активацию **UpdateCacheMiddleware**/**FetchFromCacheMiddleware**, либо через декорирование функции представления при помощи декоратора **cache\_page**. У первого способа имеется один существенный недостаток — он включает HTTP-кэширование для всех без исключения представлений (view) проекта, зато второй содержит тот самый баг #15855. Если бы не этот баг, то вариант с использованием cache\_page являлся бы более предпочтительным. Плюс, такой вариант хорошо согласуется с важнейшим из постулатов [The Zen of Python][6], что «явное лучше неявного». [Читать дальше →][7]

[1]: https://habrastorage.org/files/ea8/e35/828/ea8e3582889040839d40c1ba58b738a9.png
[2]: https://habrahabr.ru/company/redmadrobot/blog/305774/
[3]: https://www.mnot.net/cache_docs/
[4]: https://habrahabr.ru/post/203548/
[5]: https://code.djangoproject.com/ticket/15855
[6]: https://www.python.org/dev/peps/pep-0020/
[7]: https://habrahabr.ru/post/305774/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut