Проверка CSRF не удалась. Запрос прерван. Файл cookie CSRF не установлен

#django #django-templates #django-views

#django #django-шаблоны #django-просмотры

Вопрос:

ОШИБКА:

Причина сбоя: файл cookie CSRF не установлен.

Как правило, это может произойти, когда имеет место подлинная подделка межсайтового запроса или когда механизм CSRF Django использовался неправильно. Для почтовых форм вам необходимо убедиться, что ваш браузер принимает файлы cookie. Функция просмотра использует RequestContext для шаблона вместо контекста. В шаблоне внутри каждой формы POST есть тег шаблона {% csrf_token %}, который нацелен на внутренний URL. Если вы не используете CsrfViewMiddleware, вы должны использовать csrf_protect для любых представлений, которые используют тег шаблона csrf_token, а также для тех, которые принимают данные POST. Вы видите раздел справки на этой странице, потому что у вас есть DEBUG = True в вашем файле настроек Django. Измените это значение на False, и будет отображаться только начальное сообщение об ошибке. Вы можете настроить эту страницу, используя параметр CSRF_FAILURE_VIEW.

Сделал все, что смог найти, ничего не помогло, должно быть, что-то действительно глупое ((

Мой шаблон

 <form method="POST">{% csrf_token %}
     {% for field in  form %}
       <div class="control-group">
            {{ field }}
       </div>
     {% endfor %}
     <input type="Submit" id="fsubmit" class="btn btn-primary btn-large btn-block" value='Register'/>
</form>
 

мой Views.py

 from django.shortcuts import render_to_response
from django.template import RequestContext

def register_user(request):
    context = {}
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            pass
    else:
        form = RegisterForm(auto_id=False)
    context['form'] = form
    return render_to_response('templates/register.htm',context, context_instance=RequestContext(request))
 

Настройки

 MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
 

)

Ответ №1:

Используйте csrf_exempt, чтобы избежать токена csrf.

В поле зрения

из django.views.decorators.csrf импортируйте csrf_exempt

 @csrf_exempt
def register_user(request):
    context = {}
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            pass
    else:
        form = RegisterForm(auto_id=False)
    context['form'] = form
    return render_to_response('templates/register.htm',context, context_instance=RequestContext(request))