Python 禁止(403)CSRF验证失败。请求在Django中被中止
Django为什么显示此错误:“禁止(403)CSRF验证失败。请求中止。'当我在表单中已经有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
{%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())