Django 1.4中的CSRF保护

3
我正在通过阅读《Django Book》学习Django,并且我在CSRF保护方面遇到了问题。虽然我在这里找到了很多建议,但没有一种适用于我的情况。
在Chrome中,我得到了这样的消息:CSRF token missing or incorrect。在Internet Explorer中,我得到了这样的消息:CSRF cookie not set
如果在settings.py中注释掉'django.middleware.csrf.CsrfViewMiddleware',则所有东西似乎都可以正常工作(当然,不会发送到虚假地址)。我尝试在我的视图上放置一个csrf_protect装饰器,但它没有帮助。我还尝试注释掉对send_mail的调用,但我仍然遇到了CSRF失败,因此显然是ContactForm引起了问题。
(我使用的是Django 1.4.1。)
我该怎么做?

views.py

from django.shortcuts import render_to_response
from django.http import HttpResponse, HttpResponseRedirect
from contact.forms import ContactForm
from django.template import RequestContext
from django.core.mail import send_mail

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}, context_instance=RequestContext(request))

def thanks(request):
    return HttpResponse("Thanks for the feedback")

forms.py

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField()
    email = forms.EmailField(required=False)
    message = forms.CharField()

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>  
1个回答

5

如果您希望启用csrf保护,请在表单中添加{% csrf_token %}标签。

如果您不想启用csrf保护,请导入并将@csrf_exempt装饰器放置在您的视图顶部(请参阅文档)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接