您好我是一个尝试使用django注册一些用户的新手,我一直在阅读Django Book并且正在关于注册的一章,http://www.djangobook.com/en/2.0/chapter14/当我按照说明进行操作时
禁止(403)
CSRF验证失败。请求中止。 帮助
失败原因:
CSRF token missing or incorrect.
通常,当存在真正的跨站点请求伪造,或者Django的CSRF机制未正确使用时,可能会发生这种情况。对于POST表单,您需要确保:
Your browser is accepting cookies.
The view function uses RequestContext for the template, instead of Context.
In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.
If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.
您正在查看此页面的帮助部分,因为您的Django设置文件中有DEBUG = True。将其更改为False,仅显示初始错误消息。
您可以使用CSRF_FAILURE_VIEW设置自定义此页面。
我将{%csrf_token%}模板标记放在帖子标记内,但它仍然给我这个错误。感谢
# views.py
#
# Copyright 2012 Talisman <KlanestroTalisman@gmail.com>
from django.shortcuts import render_to_response
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
def home (request):
return render_to_response('FirstTemplate.html',)
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect("/books/")
else:
form = UserCreationForm()
return render_to_response("register.html", {
'form': form,
})
形式
{% extends "base.html" %}
{% block title %}Create an account{% endblock %}
{% block content %}
<h1>Create an account</h1>
<form action="" method="post"{% csrf_token %}>
{{ form.as_p }}
<input type="submit" value="Create the account">
</form>
{% endblock %}
答案 0 :(得分:1)
Djangobook使用了相当旧版本的django,你可能使用的是较新的版本,我已经尝试了这些信息,csrf部分肯定已经过时,因为他们对新版本的处理方式进行了一些修改,匹配你的django版本随着书籍版本,这个错误的一些常见原因(除了pahko提到的中间件事物)是
from django.template import RequestContext
并在render语句中
return render_to_response("home/index.html", c, context_instance=RequestContext(request))
注意:在上面的语句中使用您自己的模板路径。
答案 1 :(得分:0)
尝试将它放在settings.py
中的中间件配置中MIDDLEWARE_CLASSES = (
'django.middleware.csrf.CsrfViewMiddleware',
)
希望有所帮助