Django 1.2.4 Проверка CSRF не удалась - PullRequest
8 голосов
/ 23 января 2011

Django 1.2 постоянно выдает мне эту ошибку проверки CSRF, когда я выполняю форму POST. Я «думаю», что я сделал все, что было задано в Django 1.2, а именно:

  1. Убедитесь, что MIDDLEWARE_CLASSES включен в 'django.middleware.csrf.CsrfViewMiddleware'

  2. Убедитесь, что {% csrf_token%}

    <form action="/words/new/" method="post">
    {% csrf_token %}
    {{ form.as_p }}
        <input type="submit" value="Enter" />
    </form>
    
  3. Используйте RequestContext в моем ответе

    def create(request):
        if request.method == 'POST':
            form = DefinitionForm(request.POST)
            if form.is_valid():
                form.save()
            c = {}
            return render_to_response('dict/thanks.html',c, 
                                        context_instance=RequestContext(request))
        else:
            form = DefinitionForm()
        return render_to_response('dict/create_definition.html', {
            'form' : form,
        })
    

Обратите внимание, что действие GET работает в этой функции. Так что я думаю, что я использую render_to_response прямо.

Я даже пытался добавить декоратор @csrf_protect, но даже это не сработало. У меня нет идей, и я собираюсь задохнуться от своего ноутбука.

Что-нибудь, о чем вы, ребята, можете придумать?

Спасибо!

1 Ответ

7 голосов
/ 23 января 2011

Вы не подписаны # 3.RequestContext должен использоваться с отображением шаблона, который показывает форму.Это не обязательно для страницы благодарности.

return render_to_response('dict/create_definition.html', {
    'form' : form,
}, context_instance=RequestContext(request))

И, как примечание, вы должны использовать шаблон PRG вместо прямой визуализации страницы благодарности.

...