У меня есть зрелое приложение Django, использующее прокси Nginx и серверную часть uWSGI.Я пытаюсь перенести uWSGI для использования директивы cache2, и кеш, кажется, вызывает любые формы, которые перенаправляют после успешного POST, чтобы не перенаправлять - только для перезагрузки той же страницы.Когда я отключаю кеш (или использую сервер разработчика Django), POST проходит успешно и происходит перенаправление.Я не могу себе представить, что это предполагаемое поведение для cache2 - необходимость исключать любые страницы с POST из кэша - поэтому у меня где-то должна быть неправильная конфигурация.Этот же код (за исключением директивы cache2 ini) успешно работал с кешем старого стиля.Кроме того, из uwsgicachetop видно, что страница с вопросом успешно извлекается из кеша, поэтому сам кеш работает.Есть ли какая-либо другая конфигурация, которая должна быть добавлена для успешной работы POST?
Конфигурация:
Django 1.9.13 на Python 3django-uwsgi-cache 1.0.1
Соответствующая конфигурация Nginx:
include uwsgi_params;
uwsgi_pass unix:///opt/survey.sock;
Параметры uWSGI ini:
master = true
processes = 4
no-site = true
vhost = true
enable-threads = true
vacuum = true
die-on-term = true
reload-mercy = 8
harakiri = 30
max-requests = 5000
procname-prefix = mysite_
<b>;;; The new cache2 code section <a href="https://uwsgi-docs.readthedocs.io/en/latest/Caching.html" rel="nofollow noreferrer">(like uWSGI advises)</a></b>
cache2 = name=mycache,items=3000
; serve text/html of matched requests
route = .* cache:key=${REQUEST_URI},name=mycache
; store each successful request (200 http status code)
; in the 'mycache' cache using the REQUEST_URI as key
route = .* cachestore:key=${REQUEST_URI},name=mycache
<b>;;; end of new code</b>
CACHES = {
'default': {
'BACKEND': 'uwsgicache.UWSGICache',
# and optionally, if you use a different cache name
'LOCATION': 'mycache'
}
}
Соответствующий шаблон выглядит так:
<form action='.' method='post' id='question_form'>{% csrf_token %}>
<input type='submit' value='Add to List' />
</form>
Подключено к представлению Django, которое выглядит следующим образом:
def choose_questions(request, slug, template_name='question.html', **kwargs):
if request.method == 'POST':
url = urlresolvers.reverse('survey_results')
return HttpResponseRedirect(url)
else:
choosequestionform = ChooseQuestionForm(request=request, slug=slug)
return render(request, template_name, locals())