Django:禁止(未设置 CSRF cookie。)
Django: Forbidden (CSRF cookie not set.)
我遇到了 "CSRF cookie not set" 的问题。我所需要的只是外部计费平台将更新发送到 django 服务器。它在本地与 Postman 一起工作,但在演示服务器中它不工作...
代码
# views.py
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
@csrf_exempt
def postback(request):
print(request.POST)
return JsonResponse({'ok': 'hoooh!'})
# urls.py
from django.conf.urls import url
from billing import views
urlpatterns = [
url(r'^postback/$', views.postback),
]
错误
Forbidden (CSRF cookie not set.): /billing/postback/
[21/Jul/2016 10:49:21] "POST /billing/postback/ HTTP/1.1" 403 2682
回传到请求服务器的结果
https://requestb.in/p0rihap0?inspect#t67d6c
环境
- Python 3.5.1+
- Django 1.10rc1
如果您在设置文件中将 CSRF_COOKIE_SECURE
设置为 True
,则 cookie 将被标记为 "secure",因此需要 HTTPS 连接。
这就是您收到该错误的原因。
更多信息here。
我在这里找到了解决方案:
我在系统的某些部分使用了 DRF,也许它生成了 CSRF 错误并忽略了 csrf_exempt 装饰器。
感谢您的帮助!
我修改urls.py
如果您在 urls.py 中管理您的路由,您可以用 csrf_exempt() 包装您想要的路由,以将它们从 CSRF 验证中间件中排除。
from django.conf.urls import patterns, url
from django.views.decorators.csrf import csrf_exempt
from . import views
urlpatterns = patterns('',
url(r'^object/$', csrf_exempt(views.ObjectView.as_view())),
...
)
在views.py
class ObjectView(CreateView):
def post(self, request):
if request.method == 'POST':
#enter you view
我遇到了 "CSRF cookie not set" 的问题。我所需要的只是外部计费平台将更新发送到 django 服务器。它在本地与 Postman 一起工作,但在演示服务器中它不工作...
代码
# views.py
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
@csrf_exempt
def postback(request):
print(request.POST)
return JsonResponse({'ok': 'hoooh!'})
# urls.py
from django.conf.urls import url
from billing import views
urlpatterns = [
url(r'^postback/$', views.postback),
]
错误
Forbidden (CSRF cookie not set.): /billing/postback/
[21/Jul/2016 10:49:21] "POST /billing/postback/ HTTP/1.1" 403 2682
回传到请求服务器的结果
https://requestb.in/p0rihap0?inspect#t67d6c
环境
- Python 3.5.1+
- Django 1.10rc1
如果您在设置文件中将 CSRF_COOKIE_SECURE
设置为 True
,则 cookie 将被标记为 "secure",因此需要 HTTPS 连接。
这就是您收到该错误的原因。
更多信息here。
我在这里找到了解决方案:
我在系统的某些部分使用了 DRF,也许它生成了 CSRF 错误并忽略了 csrf_exempt 装饰器。
感谢您的帮助!
我修改urls.py
如果您在 urls.py 中管理您的路由,您可以用 csrf_exempt() 包装您想要的路由,以将它们从 CSRF 验证中间件中排除。
from django.conf.urls import patterns, url
from django.views.decorators.csrf import csrf_exempt
from . import views
urlpatterns = patterns('',
url(r'^object/$', csrf_exempt(views.ObjectView.as_view())),
...
)
在views.py
class ObjectView(CreateView):
def post(self, request):
if request.method == 'POST':
#enter you view