我想使用request.POST而不是request.GET,
#contact_form.html
<form action = '/contact/' method = 'post'>
<p>Subject:<input type = 'text' name = 'subject'></p>
<p>Your e-mail (optional): <input type = 'text' name = 'e-mail'></p>
<p>Message:<textarea name = 'message' rows = '10' cols = '50'></textarea></p>
<input type = 'submit' value = 'Submit'>
</form>
#views.py
def contact(request):
errors = []
if request.method == 'POST':
if not request.POST.get('subject',''):
errors.append('Enter a subject.')
if not request.POST.get('message',''):
errors.append('Enter a message.')
if not request.POST.get('email') and '@'not in request.POST['email']:
errors.append('Enter a valid e-mail address.')
if not errors:
send_mail(
request.POST['subject'],
request.POST['message'],
request.POST.get('email', 'noreplay@example.com'),
['siteowner@example.com'],
)
return HttpResponseRedirect('/contact/thanks/')
return render_to_response('contact_form.html',{'errors':errors})
禁止(403)
CSRF验证失败。请求中止。
=============================================== ========================
我该怎么办? POST和GET究竟有什么区别?
答案 0 :(得分:0)
此错误由Cross Site Request Forgery protection(CSRF)中间件显示,其目的是防止恶意网站在没有您的用户的情况下发送数据。知识。
简而言之:您需要将{% csrf_token %}
添加到模板中的<form>
元素中。
有什么好处?我们假设你把它放在一个网页上,有人决定用虚假数据向你发送垃圾邮件,并设法注入任何人进入页面时提交表单的Javascript代码。 (或者更糟糕的是,如果您的表单允许用户执行破坏性操作,例如删除他的帐户。)CSFR会停止该操作,因为它确保只有作为对HTML表单的响应而发送的请求才能通过。
除此之外:还有更好的方法来生成和验证表单。您可以使用django.forms使Django生成联系表单,该联系表单将自动验证用户是否输入了主题,消息文本和有效的电子邮件地址,并显示相应的错误消息(如果他们不知道。
答案 1 :(得分:0)
车的答案绝对正确,你也可以在看到这样的功能之前和@csrf_exempt:
@csrf_exempt
def contact(request):
你应该像这样导入它:
from django.views.decorators.csrf import csrf_exempt