Django CSRF验证失败.请求已中止.-未设置CSRF cookie

 平凡我86 发布于 2023-01-29 21:59

我知道之前已经问过这个问题.我已经尝试了几乎所有人给出的选项,但我似乎无法解决它.我是一个完整的新手所以请让我知道我哪里出错了.

我想写一个简单的原始形式.到目前为止,我还没有实现任何身份验证或会话机制(但是从我读过的内容看这个问题并不重要.如果我错了,请纠正我).

当我尝试提交表单时,出现此错误:

Forbidden (403)
CSRF verification failed. Request aborted.

Reason given for failure:
    CSRF cookie not set.

这是我的代码:

我的Views.py有这个方法:

def submit(request):
    global alphabet_array
    dishes = Dish.objects.all().order_by('name')
    if request.method == "POST":
        print request.POST['restaurant']
        print request.POST['rating']
        render_to_response('index.html', {}, context_instance=RequestContext(request))
    else:
        render_to_response('index.html', {}, context_instance=RequestContext(request))

许多人说使用RequestContext解决了这个问题,但对我来说,即使这样也行不通.

模板如下所示:

  
{% csrf_token %}

settings.py中的middleware_classes如下所示:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

django.middleware.csrf.CsrfViewMiddleware就在那里,它在'django.contrib.sessions.middleware.SessionMiddleware'下面

我的url.py有条目:

url(r'^admin/', include(admin.site.urls)),
    url(r'^index/$', 'testapp.views.index'),

    url(r'^starts_with/(?P.+)/dish/(?P\d+)/$', 'testapp.views.alphabet_dish'),
    url(r'^starts_with/(?P.+)/$', 'testapp.views.alphabet'),
    url(r'^submit/$', 'testapp.views.submit'),

我真的不确定这里有什么问题.正如我所说,我在这里阅读了类似的帖子并尝试了回复中提到的所有内容.我错过了什么?我的浏览器是Chrome,它接受Cookie.

1 个回答
  • 您的CSRF设置很好.问题是你没有返回结果.请记住,视图是一个功能.你不仅需要return render_to_response(...)调用它(这也是为什么通过删除CSRF你得到didn't return an HttpResponse错误)

    除此之外,你正在做一些同样错误的一般事情:

    不要使用render_to_response(使用render).

    不要重复自己.

    不要在django中使用全局变量.

    因此:

    def submit(request):
        # global alphabet_array
        dishes = Dish.objects.all().order_by('name')
        if request.method == "POST":
            print request.POST['restaurant']
            print request.POST['rating']
    
        return render(request, 'index.html', {})
    

    2023-01-29 22:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有