我已经实现了djangobook 第 7 章Tying Form objects into views
中的以下示例(我使用的是 Django1.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>
当我转到绑定到此视图的 url 并提交我得到的表单时Forbidden(403) CSRF verification failed, Request aborted
。我必须在{% csrf_token %}
之后添加<form action="" method="post">
并通过context_instance=RequestContext(request)
才能render_to_response
使其正常工作。是不是我做错了什么/我监督了一些设置,因为我不明白作者是如何在没有我必须做的更正的情况下让这个例子工作的。顺便说一句,我没有更改默认设置配置的任何内容。