【问题标题】:Django returning 403 Error -- "CSRF cookie not set"Django 返回 403 错误——“未设置 CSRF cookie”
【发布时间】:2014-03-11 16:21:31
【问题描述】:

我收到 405 错误,特别是 CSRF verification failed. Request aborted. CSRF cookie not set.

我的urls.py 是:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from users.views import HandlerView
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^users/login$', HandlerView.as_view(), name='my-view'),
    url(r'^users/add$', HandlerView.as_view(), name='my-view'),
)

而我的views.py 是:

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import View

class HandlerView(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse('Hello, World!')

    def post(self, request, *args, **kwargs):
        print "Hello world!"
        return HttpResponse('Hello, World!')

我在终端输入的 curl 执行是:

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d ' {"user" : "jeff", "password" : "pass1"} ' http://localhost:8000/users/add

运行我的服务器的终端返回:

[13/Feb/2014 00:38:06] "POST /users/add HTTP/1.1" 403 2282

我了解 CSRF 是什么,但是当没有 cookie 时,通过终端的 POST 方法会标记什么,对吗?有什么办法可以解决这个问题?

【问题讨论】:

    标签: python html django post


    【解决方案1】:

    可能会出现此错误,因为您可能在中间件设置中打开了 CSRF 保护。

    如果您不需要该保护,您可以将视图设置为CSRF exempt。 您可以简单地在视图上使用装饰器,也可以将其从中间件设置中禁用。

    from django.views.decorators.csrf import csrf_exempt
    from django.http import HttpResponse
    
    @csrf_exempt
    def my_view(request):
        return HttpResponse('Hello world')
    

    【讨论】:

      猜你喜欢
      • 2012-08-02
      • 2016-06-22
      • 2021-10-08
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 2020-12-05
      • 2013-03-28
      相关资源
      最近更新 更多