В 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, изображения и т. Д.). Затем браузер может проанализировать эти заголовки и принять решение запросить контент или использовать контент, сохраненный на стороне клиента. Однако это обычно не относится к динамическому контенту.

Другие вопросы по тегам