我只是用 POST 方法构建一个简单的 HTML 表单,不幸的是我发现了 CSRF 验证错误。
这只是一个在本地主机上使用 POST 方法的简单 html 表单。不涉及跨站点。我绝对可以通过使用 csrf_token 来修复它,但我仍然不明白为什么 django 要求我这样做......
此处不涉及重定向/iframe...
那么,为什么会这样??这对所有人来说都是正常的吗??
# Also tried using RequestContext(request) but there isn't any change in the error
#settings.py
'django.middleware.csrf.CsrfViewMiddleware' in MIDDLEWARE_CLASSES
#views.py
# url for home page is "" i.e, http://127.0.0.1:8000/
def HomePage (request):
if request.method == "POST":
form = myForm(request.POST)
if form.is_valid():
data = form.cleaned_data
context = { "myForm" : myForm(choices),
"values" : data,
}
return render_to_response("home.html", context)
else:
form = myForm(choices)
context = {"myForm" : form}
return render_to_response("home.html", context)
# home.html
<div id="pingmeeForm">
<form action="" method="post">
<table>
{{myForm.as_table}}
</table>
<input name="enter" type="submit" value="enter"/>
</form>
{{values}}
</div>
# forms.py
class myForm (forms.Form):
def __init__(self, my_choices,*args, **kwargs):
super(myForm, self).__init__(*args, **kwargs)
self.fields['Friends'] = forms.ChoiceField(choices=my_choices)
message = forms.CharField()
请您参考如下方法:
如果您执行发布请求,通常会更改服务器的状态。如果您更改服务器的状态,您不想让其他站点这样做。为了防止其他站点在您的服务器上发出后请求,您添加了 csrf 保护。因此,解决方案(恕我直言)绝不应该是删除 Csrf 保护。根据情况,有以下两种情况之一:
- 您的发布请求不会更改状态。在这种情况下,将其设为获取请求。
- 您的发布请求更改了状态。你需要 CSRF。
