В Django 1.3 alpha 1, кэш страниц встроенного веб-сервера (или результаты базы данных) более агрессивно, чем раньше?
Я использую Django версии 1.3 alpha 1 (SVN-14750) для создания сайта Django.
У меня есть пара страниц, которые отображают данные и позволяют мне редактировать эти данные. Однако мне кажется, что мне нужно перезапустить встроенный веб-сервер Django, чтобы увидеть обновленные данные.
Я не помню, чтобы у меня была такая проблема раньше: обычно это делается с помощью обновления CTRL + F5 в браузере. Очевидно, что это довольно раздражающее поведение во время разработки, потому что видеть актуальную загрузку данных медленнее, чем мгновенную загрузку устаревших данных.
Я использую Firefox с отключенным кешем (о: config, network.http.use-cache=False
), так что я вполне уверен, что проблема с Джанго.
2 ответа
Ах, у меня все еще было включено какое-то промежуточное ПО для кеша. Удаление следующего из моего MIDDLEWARE_CLASSES
установка в settings.py исправила это.
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
(Как видно из вопроса и этого ответа, я не очень хорошо понимаю кеширование, Django или иное.)
Сами веб-серверы не выполняют кеширование. Решение о том, как работает кэширование на стороне сервера, решает само приложение. В случае с Django есть несколько вариантов включения кэширования.
Однако высокий уровень заключается в том, что Django видит запрос URL-адреса, генерирует строку html в ответе и сохраняет эту строку в памяти (или базе данных - в зависимости от установленного вами бэкэнда кэша). В следующий раз, когда поступит запрос на тот же URL, Django проверит, находится ли этот ответ в кеше, и, если это произойдет, вернет эту строку. Если этого не произойдет, процесс повторяется.
Идея создания @vary_on декораторов заключается в том, что вы изменяете ключи поиска для поиска ответа в кеше. Если вы меняетесь (пользователь, URL). алгоритм работает примерно так:
1. request /users/3/Josh
2. key = str(user) + str(url)
3. response = get_from_cache(key)
4. if response is None: response = view_function()
5. save_to_cache(key, response)
6. return response
Веб-сервер не имеет никакого ввода в этот тип кэширования.
Другой тип кэширования - на стороне клиента. Это где веб-сервер настроен на возврат определенных заголовков для определенных типов ресурсов, таких как статический контент (JavaScript, изображения и т. Д.). Затем браузер может проанализировать эти заголовки и принять решение запросить контент или использовать контент, сохраненный на стороне клиента. Однако это обычно не относится к динамическому контенту.