【发布时间】:2014-03-29 23:27:01
【问题描述】:
编辑已解决:我觉得自己像个白痴。我最初创建了两个单独的视图:一个用于输入,一个用于输出。我一直在输出视图中处理所有代码,即使我重新排列了我的 url 和模板以仅重用输入视图......对不起大家。现在可以正常使用了...
我在本地主机上运行,当我提交表单时,我收到“CSRF 令牌丢失”错误。我已经阅读了文档和一些 stackoverflows。我已经解决了大部分常见问题:
- 我的模板中有 csrf 令牌(加载模板时插入的正是这个:
<input type="hidden" name="csrfmiddlewaretoken" value="">) - 我正在使用带有
render_to_response('_template_',{_data_:'_data_'},context_instance=RequestContext(request))的 render_to_response - 我确实已将 RequestContext 导入到我的视图中
- 我的设置中有
'django.middleware.csrf.CsrfViewMiddleware'。
有人知道我可能会错过什么吗?
这是我的表格:
<form action="" method="post">
{% csrf_token %}
<input type="text" name="q">
<input type="submit" value = "Submit">
</form>
这是我的看法:
def view_workout(request):
errors = []
if request.method == 'POST':
q = request.POST['q']
if not request.POST.get('q', ''):
errors.append('Please complete all required fields')
return render_to_response('swimsets/view_workout.html',{
'error': errors
},context_instance=RequestContext(request))
else:
return render_to_response('swimsets/view_workout.html',{
'query': q
},context_instance=RequestContext(request))
else:
return render_to_response('swimsets/view_workout.html', {
},context_instance=RequestContext(request))
这是我的设置:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
【问题讨论】:
-
我刚刚添加了它,删除了views.pyc,重新启动了本地主机。还是不行。
-
我不禁觉得csrfmiddlewaretoken的值不应该是
""。你能试着把{{ csrf_token }}(注意双括号,不是百分号)放在某个地方,并确保它显示一个真实的令牌吗?