第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Django Rest Framework刪除csrf

Django Rest Framework刪除csrf

Django Rest Framework刪除csrf我知道有關(guān)于Django Rest Framework的答案,但我無(wú)法找到解決問(wèn)題的方法。我有一個(gè)具有身份驗(yàn)證和一些功能的應(yīng)用程序。我添加了一個(gè)新的應(yīng)用程序,它使用Django Rest Framework。我想只在這個(gè)應(yīng)用程序中使用該庫(kù)。我也想發(fā)出POST請(qǐng)求,我總是收到這個(gè)回復(fù):{     "detail": "CSRF Failed: CSRF token missing or incorrect."}我有以下代碼:# urls.pyfrom django.conf.urls import patterns, url urlpatterns = patterns(     'api.views',     url(r'^object/$', views.Object.as_view()),)# views.pyfrom rest_framework.views import APIViewfrom rest_framework.response import Responsefrom django.views.decorators.csrf import csrf_exemptclass Object(APIView):     @csrf_exempt     def post(self, request, format=None):         return Response({'received data': request.data})我想添加API而不影響當(dāng)前的應(yīng)用程序。所以我的問(wèn)題是如何才能為此應(yīng)用禁用CSRF?
查看完整描述

3 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

為什么會(huì)出現(xiàn)這種錯(cuò)誤?

這是因?yàn)?code>SessionAuthenticationDRF使用的默認(rèn)方案。DRF SessionAuthentication使用Django的會(huì)話框架進(jìn)行身份驗(yàn)證,需要檢查CSRF。

如果未authentication_classes在視圖/視圖集中定義任何內(nèi)容,DRF將使用此身份驗(yàn)證類作為默認(rèn)值。

'DEFAULT_AUTHENTICATION_CLASSES'= (
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication'),

由于DRF需要同時(shí)支持對(duì)相同視圖的會(huì)話和非會(huì)話身份驗(yàn)證,因此它僅對(duì)經(jīng)過(guò)身份驗(yàn)證的用戶執(zhí)行CSRF檢查。這意味著只有經(jīng)過(guò)身份驗(yàn)證的請(qǐng)求才需要CSRF令牌,并且可以在沒(méi)有CSRF令牌的情況下發(fā)送匿名請(qǐng)求。

如果您使用帶有SessionAuthentication的AJAX樣式API,則需要為任何“不安全”HTTP方法調(diào)用(例如PUT, PATCH, POST or DELETE請(qǐng)求)包含有效的CSRF令牌。

該怎么辦?

現(xiàn)在要禁用csrf檢查,您可以創(chuàng)建一個(gè)CsrfExemptSessionAuthentication從默認(rèn)SessionAuthentication類擴(kuò)展的自定義身份驗(yàn)證類。在此身份驗(yàn)證類中,我們將覆蓋enforce_csrf()實(shí)際內(nèi)部發(fā)生的檢查SessionAuthentication

from rest_framework.authentication import SessionAuthentication, BasicAuthentication class CsrfExemptSessionAuthentication(SessionAuthentication):

    def enforce_csrf(self, request):
        return  # To not perform the csrf check previously happening

在您的視圖中,您可以將其定義authentication_classes為:

authentication_classes = (CsrfExemptSessionAuthentication, BasicAuthentication)

這應(yīng)該處理csrf錯(cuò)誤。


查看完整回答
反對(duì) 回復(fù) 2019-08-12
  • 3 回答
  • 0 關(guān)注
  • 1423 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)