Python 禁止(403)CSRF验证失败。请求在Django中被中止

Python 禁止(403)CSRF验证失败。请求在Django中被中止,python,django,django-forms,django-csrf,Python,Django,Django Forms,Django Csrf,Django为什么显示此错误:“禁止(403)CSRF验证失败。请求中止。'当我在表单中已经有{%csrf\u token%}时 模板/core/signup.html {% block content %} <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Sign up</button> &l

Django为什么显示此错误:“禁止(403)CSRF验证失败。请求中止。'当我在表单中已经有
{%csrf\u token%}

模板/core/signup.html

{% block content %}
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Sign up</button>
    </form>
{% endblock %}
from django.contrib.auth.forms import UserCreationForm 
from django.views.generic.edit import CreateView 

class SignUpView(CreateView): 
    template_name = 'core/signup.html' 
    form_class = UserCreationForm

在your views.py中,您需要在
render_to_响应中传递
RequestContext
,以便实际运行上下文处理器

from django.template import RequestContext

 context = {}
 return render_to_response('my_template.html',
                           context,
                           context_instance=RequestContext(request))
新的渲染快捷方式(django 1.3+)将为您提供:

from django.shortcuts import render

 context = {}
 return render(request, 'my_template.html', context)
对于基于类的视图

class MyFormView(View):
     form_class = MyForm
     initial = {'key': 'value'}
     template_name = 'form_template.html'

     def post(self, request, *args, **kwargs):
         form = self.form_class(request.POST)
         if form.is_valid():
             # <process form cleaned data>
             return HttpResponseRedirect('/success/')

         return render(request, self.template_name, {'form': form})
类MyFormView(视图):
form_class=MyForm
initial={'key':'value'}
template\u name='form\u template.html'
def post(自我、请求、*args、**kwargs):
form=self.form\u类(request.POST)
如果form.is_有效():
# 
返回HttpResponseRedirect(“/success/”)
返回呈现(请求,self.template_名称,{'form':form})

因为您已经将csrf令牌从django.core.context\u processors.csrf传递到上下文管理器。检查表单HTML是否包含以下内容:

要使csrf保护工作正常,还需要做一些其他事情(请查看以下内容):

  • 您的浏览器必须接受来自服务器的Cookie

  • 确保“django.middleware.csrf.CsrfViewMiddleware”作为中间件包含在settings.py中(或者在要保护的特定视图上使用装饰程序csrf_protect())


如何在基于类的视图中执行此操作?我需要查看您的视图。我回答你会更容易。@Djanglearner不要在评论中张贴代码,它难以辨认。将它添加到您的问题编辑中。@RohanBaddi至少在CBV中,您不需要重新定义post方法,csrf_令牌也不需要它来工作。@guillermo chamorro在回复某人之前先做您的研究