Djangobook示例:不带{%csrf_token%}并传递context_instance=RequestContext(请求)的POST。怎么用?
我从中实现了以下示例(我使用的是Django1.4):Djangobook示例:不带{%csrf_token%}并传递context_instance=RequestContext(请求)的POST。怎么用?,django,django-csrf,Django,Django Csrf,我从中实现了以下示例(我使用的是Django1.4): #views.py 从django.shortcuts导入渲染到响应 从mysite.contact.forms导入ContactForm def联系人(请求): 如果request.method==“POST”: 表单=联系人表单(request.POST) 如果form.is_有效(): cd=表格.U数据 寄信( cd[“主题”], cd['message'], cd.get('电子邮件','noreply@example.com')
#views.py
从django.shortcuts导入渲染到响应
从mysite.contact.forms导入ContactForm
def联系人(请求):
如果request.method==“POST”:
表单=联系人表单(request.POST)
如果form.is_有效():
cd=表格.U数据
寄信(
cd[“主题”],
cd['message'],
cd.get('电子邮件','noreply@example.com'),
['siteowner@example.com'],
)
返回HttpResponseRedirect('/contact/Thank/'))
其他:
form=ContactForm()
返回render_to_response('contact_form.html',{'form':form})
#联系www.info.html
联系我们
联系我们
{%if form.errors%}
请更正下面的错误{form.errors | pluralize}}。
{%endif%}
{{form.as_table}}
当我转到绑定到此视图的url并提交我得到的表单时,
禁止(403)CSRF验证失败,请求中止
。我必须在
之后添加{%csrf\u token%}
,并将context\u instance=RequestContext(request)
传递到render\u to\u response
以使其工作是否有什么地方我做错了/我监督了一些设置,因为我不明白作者是如何在没有我必须进行更正的情况下让这个示例工作的。顺便说一句,我没有更改默认设置配置中的任何内容。Django手册是使用Django 1.0或1.1编写的。CSRF保护在版本1.2中已更改,因此您需要显式插入令牌。我假设此部分已针对django 1.4进行了更新。介绍说,作者正在将其更新为1.4-1.5版本,url为djangobook/en/2.0
。你知道1.4版本更新了哪些部分吗?最好为每一章指明适用的版本。
# views.py
from django.shortcuts import render_to_response
from mysite.contact.forms import ContactForm
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
send_mail(
cd['subject'],
cd['message'],
cd.get('email', 'noreply@example.com'),
['siteowner@example.com'],
)
return HttpResponseRedirect('/contact/thanks/')
else:
form = ContactForm()
return render_to_response('contact_form.html', {'form': form})
# contact_form.html
<html>
<head>
<title>Contact us</title>
</head>
<body>
<h1>Contact us</h1>
{% if form.errors %}
<p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<form action="" method="post">
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit">
</form>
</body>
</html>