Django request.method='post'被禁止?
我想使用request.POST而不是request.GETDjango request.method='post'被禁止?,django,forms,post,get,Django,Forms,Post,Get,我想使用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-mai
#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之间到底有什么区别 此错误由CSRF中间件显示,其目的是防止恶意网站在用户不知情的情况下发送数据 简而言之:您需要将{%csrf_token%}添加到模板中的元素中 它有什么好处?假设你把它放在一个网页上,有人决定用虚假数据向你发送垃圾邮件,并设法注入Javascript代码,当有人进入页面时提交表单。更糟糕的是,如果您的表单允许用户执行破坏性操作,例如删除他的帐户。CSFR停止了这一操作,因为它确保只有作为HTML表单响应发送的请求才能通过
除此之外,还有一种生成和验证表单的更好方法。您可以使用使Django生成联系人表单,该表单将自动验证用户是否输入了主题、消息文本和有效的电子邮件地址,如果用户没有输入,则会显示相应的错误消息。che的回答肯定是对的,您还可以在查看类似以下功能之前使用和@csrf\u豁免:
@csrf_exempt
def contact(request):
from django.views.decorators.csrf import csrf_exempt
您应该像这样导入它:
@csrf_exempt
def contact(request):
from django.views.decorators.csrf import csrf_exempt