drf 四

目錄

1.drf 響應(yīng)格式和請求格式配置(了解)
2.封裝自己的Response對象
3.drf自動生成路由
4.action裝飾器
5 認(rèn)證介紹和源碼分析

1.drf 響應(yīng)格式和請求格式配置(了解)

1.1 配置響應(yīng)格式

1 在配置文件中配置
REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (  # 默認(rèn)響應(yīng)渲染類
        'rest_framework.renderers.JSONRenderer',  # json渲染器
        'rest_framework.renderers.BrowsableAPIRenderer',  # 瀏覽API渲染器
    )
}

2 在瀏覽器訪問就是瀏覽器方式伴澄,用postman訪問就是json格式,ajax請求就是json格式


3 原來沒有配置羔挡,為什么顯示瀏覽器方式和json的樣子
4 drf也有一套默認(rèn)配置文件来庭,默認(rèn)就配了兩個響應(yīng)類

5 局部配置某個視圖類的響應(yīng)格式愕秫,在視圖類中配置
from rest_framework.renderers import renderer
      renderer_classes = [JSONRenderer]

1.2 配置能夠解析的格式(urlencoded,formdata燃箭,json)

1 在setting中配置
REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser'
    ]
}
2 它就只能解析三種請求編碼格式(urlencoded,formdata舍败,json)

3 局部使用招狸,在視圖類中配置
from rest_framework.parsers import FormParser
    parser_classes = [FormParser,JSONParser]

2.封裝自己的Response對象

class APIResponse(Response):
    def __init__(self, code=200, msg=None, data=None, status=None,
                 template_name=None, headers=None,
                 exception=False, content_type=None, **kwargs):
        dic = {'status': code, 'msg': msg}
        if data:
            dic['data'] = data
        if kwargs:
            dic.update(kwargs)

        super().__init__(data=dic, status=status,
                         template_name=template_name, headers=headers,
                         exception=exception, content_type=content_type)

        
### 使用邻薯,在視圖類中
return APIResponse(msg='成功了',data=ser.data)

3.drf自動生成路由

1 三種路由寫法
- path('test/', views.Test.as_view()),
- path('test/', views.Test.as_view({'get':'send_email'})),
- 自動生成路由

# 1 導(dǎo)入路由類
from rest_framework.routers import SimpleRouter, DefaultRouter
# DefaultRouter生成的路由更多一點(diǎn)裙戏,多了一個根的路由(沒有用)
# 2 實(shí)例化得到對象
router = SimpleRouter()
# 3 注冊路由

router.register('books', views.BookView)
router.register('publish', views.PublishView)

# print(router.urls) # 自動生成的路由
urlpatterns = [
    # 把自動生成的路徑加入到urlpatterns
    path('api/v1/', include(router.urls)),
]
# 4 把自動生成的路徑加入到urlpatterns
urlpatterns+=router.urls

總結(jié):ViewSetMixin+9個視圖子類才能用自動生成路由

4.action裝飾器

1 作用:給自動生成路由的視圖類再定制一些路由
2 用法一:
    # api/v1/publish/sen_email/
    @action(methods=['GET'], detail=False)
    def sen_email(self, request, *args, **kwargs):
        print(args)
        print(kwargs)
        return APIResponse(msg='發(fā)送成功')
    
3 方法二:
    # api/v1/publish/10/sen_email/
    @action(methods=['GET'], detail=True)
    def sen_email(self, request, *args, **kwargs):
        # pk=10
        print(args)
        print(kwargs)
        return APIResponse(msg='發(fā)送成功')

5 認(rèn)證介紹和源碼分析

1 只有認(rèn)證通過的用戶才能訪問指定的url地址,比如:查詢課程信息厕诡,需要登錄之后才能查看累榜,沒有登錄,就不能查看灵嫌,這時候需要用到認(rèn)證組件


2 APIVIew--->dispatche--->self.initial--->寫的
    self.perform_authentication(request)# 認(rèn)證
    self.check_permissions(request) # 權(quán)限
    self.check_throttles(request) # 頻率
    
3 APIView的perform_authentication
    -request.user # 新的request對象壹罚,drf的Request類
    
4 Request類的user
    -被包裝成了數(shù)據(jù)屬性,內(nèi)部有 self._authenticate()
    -Request類的_authenticate()方法
    
    
5 Request類的_authenticate()方法
    def _authenticate(self):
        for authenticator in self.authenticators:
            try:
                user_auth_tuple = authenticator.authenticate(self)
            except exceptions.APIException:
                self._not_authenticated()
                raise

            if user_auth_tuple is not None:
                self._authenticator = authenticator
                self.user, self.auth = user_auth_tuple
                return

        self._not_authenticated()
        
6 drf的Request對象實(shí)例化是再什么時候寿羞?
    -再APIVIew的dispatch最上面完成的
    -  return Request(
            request,
            parsers=self.get_parsers(),
            authenticators=self.get_authenticators(), # 看它
            negotiator=self.get_content_negotiator(),
            parser_context=parser_context
        )
7 APIView的get_authenticators
    def get_authenticators(self):
        return [auth() for auth in self.authentication_classes]
    -如果我再視圖類中寫:authentication_classes=[類名猖凛,類名1]
    -返回[對象,對象1]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绪穆,一起剝皮案震驚了整個濱河市辨泳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霞幅,老刑警劉巖漠吻,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異司恳,居然都是意外死亡途乃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門扔傅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耍共,“玉大人,你說我怎么就攤上這事猎塞∈远粒” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵荠耽,是天一觀的道長钩骇。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么倘屹? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任银亲,我火速辦了婚禮,結(jié)果婚禮上纽匙,老公的妹妹穿的比我還像新娘务蝠。我一直安慰自己,他們只是感情好烛缔,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布馏段。 她就那樣靜靜地躺著,像睡著了一般践瓷。 火紅的嫁衣襯著肌膚如雪院喜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天当窗,我揣著相機(jī)與錄音够坐,去河邊找鬼。 笑死崖面,一個胖子當(dāng)著我的面吹牛元咙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巫员,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼庶香,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了简识?” 一聲冷哼從身側(cè)響起赶掖,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎七扰,沒想到半個月后奢赂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颈走,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年膳灶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立由。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡轧钓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锐膜,到底是詐尸還是另有隱情毕箍,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布道盏,位于F島的核電站而柑,受9級特大地震影響文捶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牺堰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一拄轻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伟葫,春花似錦、人聲如沸院促。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽常拓。三九已至渐溶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弄抬,已是汗流浹背茎辐。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掂恕,地道東北人拖陆。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像懊亡,于是被迫代替她去往敵國和親依啰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容