Django request.method='post'被禁止?

Django 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

我想使用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之间到底有什么区别

此错误由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