繁体   English   中英

表单提交时的Django CSRF错误

[英]Django CSRF error on form submission

我正在编写Django应用。 这是我的代码:

edit.module.html (模板;删除多余的html标记):

<h1>Enter the HTML below</h1>
<form action="./update/" method="post">
    {% csrf_token %}
    <textarea cols='55' rows='15'></textarea>
    <input type='submit' value='Submit' />
</form>

urls.py

url(r'^myapp/update/$', 'myproj.myapp.views.update_module'),

view.py

from django.http import HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from django.core.context_processors import csrf
from django.template import RequestContext

#Select the module you want to edit
def edit_modules(request):
    lpconf = {"module_to_edit" : "top"}
    return render_to_response('admin/edit.module.html', lpconf, context_instance=RequestContext(request))

def update_module(request):
    return render_to_response('admin/updated.html', context_instance=RequestContext(request))

提交表单时,出现CSRF错误:“ CSRF验证失败。请求中止。”

我遵循了Django文档( https://docs.djangoproject.com/en/dev/ref/contrib/csrf/ )并试图解决此问题,但我做不到。 我在这里做错了什么?

谢谢。

更新:更新了view.py函数edit_modules和update_modules。 edit_modules是一个呈现表单的表单,update_modules是一个处理表单的表单。 现在,我没有收到CSRF错误。 我现在收到错误: 空模块名称

更新:我能够修复它。 我正在使用一个视图来渲染表单,并使用另一个视图来处理它。 我必须在渲染表单的第一个视图中添加上下文。

您需要在update_module视图中使用RequestContext ,而不是普通的HttpResponse 如果您使用方便的渲染快捷方式 ,它将自动添加。 Django教程对此有一个很好的介绍。 快捷方式:render()

您可以在settings.py中启用请求上下文流程

TEMPLATE_CONTEXT_PROCESSORS = (...
    "django.core.context_processors.request")

因此您不必执行以下操作:

return render_to_response('my_template.html',
                      my_data_dictionary,
                      context_instance=RequestContext(request)

相反,只需:return render_to_response('my_template.html',my_data_dictionary)

另外,请确保您在settings.py中的MIDDLEWARE_CLASSES中启用了“ django.middleware.csrf.CsrfViewMiddleware”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM