Я использую это промежуточное программное обеспечение для перенаправления всех страниц на целевую страницу:. (Часть AuthRequiredMiddleware
классаДжанго, csrf_token не отображается на форме после перенаправления
def process_request(self, request):
assert hasattr(request, 'user')
if not request.user.is_authenticated():
path = request.path_info.lstrip('/')
if path not in ['ipn/', 'pp_cancel/', 'pp_success/', 'sitemap/', 'welcome/']:
lang = request.GET.get('lang', 'en')
ru = request.GET.get('ru', '')
return render_to_response('landing_en.html', RequestContext(request, {'ru': ru}))
и это мой settings.py
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'main.common.SessionBasedLocaleMiddleware.SessionBasedLocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'main.common.tz_middleware.TimezoneMiddleware',
'main.common.sslMiddleware.SSLRedirect',
'main.common.RedirectAllMiddleware.AuthRequiredMiddleware',
)
Если URL-адрес (например) /welcome/
и не выполнено перенаправление {% csrf_token %}
работает и отображается в форме. Если пользователь перенаправлен, csrf_token отображается в форме.
Что я делаю неправильно?
Я считаю, что это часть защиты csrf обеспечивает (основная проблема - подделка кросс-сайта, кто-то притворяется пользователем, но исходит из другого URL-адреса). Я не уверен, как перевести это решение, но попробуйте, возможно, использовать 'render' вместо' render_to_response'. Это гарантирует, что все процессоры контекста будут работать правильно, возможно, это поможет – yuvi
Это не перенаправление! [HttpResponseRedirect] (https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponseRedirect) является перенаправлением. – danihp
'' RequestContext (запрос, {'ru': ru}) '' содержит csrf_token? – erthalion