我的Django应用程序中的CSRF验证存在一些问题。我的应用中有两个其他{% csrf_token %}
标记,位于两个不同的HTML模板中。这些工作很好,而且总是有。当尝试在另一个新模板中添加第三个时,我会收到'403 Forbidden'页面。我已经完全复制了两个工作'post'命令的样式,但由于某种原因,这个命令不起作用。有什么建议吗?
'post'表单包含一个选择/下拉对象和一个提交按钮。单击该按钮应指向视图以处理发布的数据,再次像前两个一样写入,但它会引发403错误,导致失败的原因是“CSRF令牌丢失或不正确”。我也在运行Django 1.4.22,启用了用户身份验证。这是不工作的观点:
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
...Other Views...
@login_required
def Process(request, id):
...
try:
choice = request.POST['choice']
except(KeyError, Item.DoesNotExist):
return render_to_response('app/home.html', context_instance=RequestContext(request))
else:
...Process posted data...
return HttpResponseRedirect(reverse('app.views.display', args=()))
以下是工作视图:
#Same includes/imports as earlier, in same file
@login_required
def Submit(request, id, id_2, data):
try:
new_data = request.POST[data.name]
except(KeyError, DataPoint.DoesNotExist):
return render_to_response('app/home.html', context_instance=RequestContext(request))
else:
...Process new data...
return HttpResponseRedirect(reverse('app.views.Data_View', args=()))
这是HTML文件:
<!DOCTYPE html>
...
<table>
<tr><td>
<form action="/app/page/to/redirect/to/" method="post">
{% csrf_token %}
<select name="choice">
<option name="yes" value="yes" selected>Yes</option>
<option name="no" value="no">No</option>
</select>
</form></td></tr>...</table>