Django w/Apache,CSRF验证失败
我的Django应用程序中的CSRF验证有点问题。我的应用程序中还有两个Django w/Apache,CSRF验证失败,django,apache,csrf,Django,Apache,Csrf,我的Django应用程序中的CSRF验证有点问题。我的应用程序中还有两个{%csrf\u token%}标记,位于两个不同的HTML模板中。这些很好用,而且一直都有。当尝试在另一个新模板中添加第三个模板时,我收到了“403禁止”页面。我已经完全复制了两个工作的“post”命令的样式,但由于某些原因,这一个将无法工作。有什么建议吗 “post”表单包含一个选择/下拉对象和一个提交按钮。点击按钮应该指向一个视图来处理发布的数据,就像前2个一样再次写入,但它会抛出403错误,失败的原因是“CSRF令牌
{%csrf\u token%}
标记,位于两个不同的HTML模板中。这些很好用,而且一直都有。当尝试在另一个新模板中添加第三个模板时,我收到了“403禁止”页面。我已经完全复制了两个工作的“post”命令的样式,但由于某些原因,这一个将无法工作。有什么建议吗
“post”表单包含一个选择/下拉对象和一个提交按钮。点击按钮应该指向一个视图来处理发布的数据,就像前2个一样再次写入,但它会抛出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=()))
以下是工作视图:
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>
...
{%csrf_令牌%}
对
不
...
是否已将csrf_标记添加到视图中的渲染上下文中?你能展示你的观点吗?我不知道你的意思。我在任何观点中都没有提到csrf_令牌,包括那些有效的。仅在模板中。您必须使用来自django.core.context\u的处理器导入csrf
或来自django.views.decorators.csrf导入csrf\u protect的或来自我尝试添加您建议的第一个导入行的其他方法,但没有更改。我没有任何类似的东西,但其他2个仍然有效。请显示“工作”和“不工作”视图,编辑您的问题。