2015-12-16 57 views
0

我的作用的看法是:Django的 - 方法PUT - 故宮(CSRF的cookie未設置。):對方法PUT

return JsonResponse ({}) 

使用HttpRequester(插件用於Firefox)

我得到CSRF驗證失敗。請求中止。

打印(要求)給出以下結果:

Forbidden (CSRF cookie not set.): /test/src/4213 

我不知道我應該做的。請問你能幫幫我嗎 ?

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^test/src/(\d+)', MyView.as_view(), name='put_'), 
] 

class MyView(View): 
    .... 
    def put(self, request, *args, **kwargs): 
      print(request) 
      return JsonResponse({}) 

我沒有表格,所以我不能包含{%csrf_token%}。我沒有html文件。我試着用HttpRequester(firefox addon)測試它

+0

您提交表單嗎? – theamateurdataanalyst

+0

你能分享一下urls.py和views.py來更好地理解事情是如何工作的嗎? – DhiaTN

+0

我編輯了我的第一篇文章。再看看它的底部。 – user40545

回答

1

請確保您提交的表單是{%csrf_token%}作爲表單中的隱藏輸入。

此外,檢查,以確保CsrfViewMiddleware在你MIDDLEWARE_CLASSES settings.py中

+0

我編輯了我的第一篇文章。再看看這一個的底部。 – user40545

0

如果這個觀點是不是一個形式,而是要通過一些你可以刪除CSRF檢查與csrf_exempt裝飾直接訪問:

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^test/src/(\d+)', csrf_exempt(MyView.as_view()), name='put_'), 
] 
+0

這個問題不是關於表單也不是ajax,OP是從Firefox擴展請求的。就像在任何REST API中一樣(例如,參見DRF),可以禁用csrf。但是,這應該有更多的解釋。 – jmbarbier

+0

你說得對,它是REST API。我應該禁用csrf嗎?怎麼做 ? – user40545

+0

參見[DRF](http://www.django-rest-framework.org/topics/ajax-csrf-cors/)中的討論。如果這是一個混合環境,你可以刪除每個視圖的CSRF視圖,但只有當這個REST API視圖是用一個不基於會話的認證系統來訪問時。而如何做到這一點,就是'@method_decorator(csrf_exempt)' – jmbarbier