В Django 1.3 alpha 1, кэш страницы встроенного веб-сервера (или результаты базы данных) более агрессивно, чем раньше? - PullRequest
1 голос
/ 07 декабря 2010

Я использую Django версии 1.3 alpha 1 (SVN-14750) для создания сайта Django.

У меня есть пара страниц, которые отображают данные и позволяют мне редактировать эти данные. Однако мне кажется, что мне нужно перезапустить встроенный веб-сервер Django, чтобы увидеть обновленные данные.

Я не помню, чтобы у меня была такая проблема раньше: обычно это CTRL + F5 в браузере. Очевидно, что это довольно раздражающее поведение во время разработки, потому что видеть актуальную загрузку данных медленнее, чем мгновенную загрузку устаревших данных.

Я использую Firefox с отключенным кэшем (о: config, network.http.use-cache=False), поэтому я вполне уверен, что проблема связана с Django.

Ответы [ 2 ]

2 голосов
/ 19 декабря 2010

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

1 голос
/ 19 декабря 2010

Ах - у меня все еще было включено некоторое промежуточное программное обеспечение кеша. Удалите следующее из моей настройки MIDDLEWARE_CLASSES в settings.py и исправили ее.

'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',

(Как видно из вопроса и этого ответа, я не очень хорошо понимаю кеширование, Django или иное).

...