gpt4 book ai didi

django - Django 1.4 中的 CSRF 保护

转载 作者:行者123 更新时间:2023-12-02 05:01:04 25 4
gpt4 key购买 nike

我正在尝试通过“The Django Book”来学习 Django,但我遇到了 CSRF 保护问题。我在这里找到了很多建议,但似乎没有一个对我有用。

使用 Chrome 时,我收到消息:CSRF token 丢失或不正确
使用 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>

最佳答案

如果您想要 csrf 保护,请将 {% csrf_token %} 标记放入表单中。

如果您不需要 csrf 保护,请导入 @csrf_exempt 装饰器并将其放置在 View 顶部(请参阅 the docs )。

关于django - Django 1.4 中的 CSRF 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14074844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com