DRF

DRF

學習目標

  • FBV 前后端分離源碼
    • 需要判斷請求方式
    • 序列化吠撮,反序列化難度大
  • CBV django的前后端分離
    • 不需要判斷請求方式
    • 序列化灾而,反序列化難度大
  • DRF djangorestframework
    • 解決序列化,反序列化問題
  • FBV+DRF
    • 需要判斷請求方式
    • 序列化蓄愁,反序列化問題解決
  • CBV+DRF
    • 不需要判斷請求方式
    • 序列化娶桦,反序列化問題解決

學習課程

1.FBV

概念:基于函數(shù)的視圖函數(shù)贾节。(function base view)
使用結(jié)構(gòu):
        if request.method == 'GET':
            pass
        if request.method == 'POST':
            pass
        if request.method == 'DELETE':
            pass
        if request.method == 'PUT':
            pass    
        if request.method == 'PATCH':
            pass
注意:請求方式必須大寫
總結(jié):- 需要判斷請求方式
     - 序列化汁汗,反序列化難度大

2.CBV

(1)view
概念:基于類的視圖函數(shù)。(class base view)
使用步驟:
    ①繼承自系統(tǒng)的類視圖
        class HelloCBV(View)
    ②書寫請求方式對應的函數(shù)栗涂, 函數(shù)名就是請求方式名字的小寫
        注意只能小寫
        方法中的參數(shù)必須書寫request
    ③:注冊路由  views.類視圖.as_view()
        url(r'^index/',views.類名.as_view(),name='index')
        url(r'^hello/',views.HelloCBV.as_view(),name='hello')
        注意:as_view默認情況下沒有()  需要手動添加
總結(jié):- 不需要判斷請求方式
     - 序列化知牌,反序列化難度大

(2)TemplateView

作用:執(zhí)行類視圖然后跳轉(zhuǎn)到指定模板。
TemplateView
    繼承TemplateView
            不需要寫get方法  因為TemplateView里重寫了get方法
    實現(xiàn)方法1  
        在as_view中書寫tempate_name屬性
        eg:
url(r'^template/', views.HelloTemplateView.as_view(template_name='hello.html'), name='template')
    實現(xiàn)方法2
        在類視圖中指定 template_name='hello.html'
        eg:
url(r'^template/', views.HelloTemplateView.as_view(), name='template')
實現(xiàn)原理:
        TemplateView繼承了TemplateResponseMixin, ContextMixin, View
        TemplateView類中定義了get方法戴差,該方法調(diào)用了TemplateResponseMixin的render_to_response方法
應用場景:單純的跳轉(zhuǎn)頁面 eg:跳轉(zhuǎn)到登陸頁面

(3)ListView

作用:執(zhí)行類視圖然后跳轉(zhuǎn)到指定模板并且傳遞數(shù)據(jù)
ListView
    屬性
        template_name
        model=模型
        queryset=模型.object.all()
        必須要寫model或者queryset寫一個
    渲染在模板上
        模型_list
         object_list
    實現(xiàn)原理:
            負責跳轉(zhuǎn)頁面
                  ListView繼承了MultipleObjectTemplateResponseMixin送爸,
                  MultipleObjectTemplateResponseMixin繼承了TemplateResponseMixin,
                  在TemplateResponseMixin中有render_to_response方法
            負責傳遞參數(shù)
                  ListView繼承了BaseListView暖释,
                  BaseListView繼承了MultipleObjectMixin袭厂,
                  MultipleObjectMixin中有model和queryset的屬性和get_queryset方法
應用場景:查詢 eg:list  分頁

(4)DetailView

作用:執(zhí)行類視圖跳轉(zhuǎn)到指定模板,傳遞一個數(shù)據(jù)
DetailView
    渲染在模板上
    template_name
    數(shù)據(jù)
        model
            model=Animal
        queryset
            queryset = Animal.objects.all()
    單一實例
        pk
            url(r'^single/(?P<pk>\d+)/', views.HeDetailView.as_view(), name='single')
    實現(xiàn)原理:
            負責跳轉(zhuǎn)頁面
                  DetailView繼承了SingleObjectTemplateResponseMixin球匕,
                  SingleObjectTemplateResponseMixin繼承了TemplateResponseMixin纹磺,
                  TemplateResponseMixin有一個render_to_response方法
            負責傳遞參數(shù)
                 DetailView繼承了BaseDetailView,
                 BaseDetailView繼承了SingleObjectMixin亮曹,
                 SingleObjectMixin中有model橄杨,queryset,get_queryset方法
    應用場景:修改 點擊修改的時候 然后傳遞id參數(shù) 獲取到對象 在表單中遍歷

總結(jié):

? View適用于前后端分離照卦,方法返回的是json數(shù)據(jù) eg:changexxx

? TemplateView式矫,ListView, DetailView適用全棧開發(fā),

? TemplateView:跳轉(zhuǎn)頁面 eg:toLogin

? ListView:跳轉(zhuǎn)頁面役耕,傳遞數(shù)據(jù) eg:xxxList

DetailView:跳轉(zhuǎn)頁面采转,傳遞單個數(shù)據(jù)                      eg:loadxxx

3.Drf

實現(xiàn)步驟:
    (1)pip install djangorestframework

    (2)項目 tutorial
            app quickstart
                  serializers  序列化
                          class UserSerializer(serializers.HyperlinkedModelSerializer):
                              class Meta:
                                  model = User
                                  fields = ['url', 'username', 'email', 'groups']


                          class GroupSerializer(serializers.HyperlinkedModelSerializer):
                              class Meta:
                                  model = Group
                                  fields = ['url', 'name']
    (3) views.py
                    class UserViewSet(viewsets.ModelViewSet):
                        queryset = User.objects.all().order_by('-date_joined')
                        serializer_class = UserSerializer


                    class GroupViewSet(viewsets.ModelViewSet):
                        queryset = Group.objects.all()
                        serializer_class = GroupSerializer

    (4)根路由urls.py
                    router = routers.DefaultRouter()
                    router.register(r'users', views.UserViewSet)
                    router.register(r'groups', views.GroupViewSet)

                    urlpatterns = [
                        url('', include(router.urls)),
                        url('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
            ]
    (5)settings
                    INSTALLED_APPS = [
                        ...
                        'rest_framework',
                    ]

4.FBV+DRF

實現(xiàn)步驟:
    (1)在app中創(chuàng)建serializers文件 序列化器
                class BookSerializer(serializers.Serializer):
                        id = serializers.IntegerField()
                        b_name = serializers.CharField()
                        b_price = serializers.FloatField()

                def update(self, instance, validated_data):
                    instance.id = validated_data.get('id',instance.id)
                    instance.b_name = validated_data.get('b_name',instance.b_name)
                    instance.b_price = validated_data.get('b_price',instance.b_price)

                    instance.save()
                    return instance

                def create(self, validated_data):
                    return Book.objects.create(**validated_data)
    (2)創(chuàng)建序列化器對象
              bookserializer = BookSerializer(序列化對象)
              bookserializer.data

5.CBV+DRF

實現(xiàn)步驟:
    (1)class GameSerializer(serializers.ModelSerializer):
            class Meta:
                model = Game
                fields = ['id','g_name']
         繼承serializers.ModelSerializer
         元信息
                model=序列化的模型類
                fields=[序列化的字段]
     (2)創(chuàng)建序列化器對象
              gameserializer = GameSerializer(序列化對象)
              gameserializer.data
              
 注意:序列化器默認序列化一個對象 會報錯  解決方案:在序列化器實例化的時候添加參數(shù)many=True
      如果報錯safe問題 那么需要在JsonResponse中添加參數(shù)safe=False
      亂碼問題:JsonResponse中添加參數(shù)json_dumps_params={'ensure_ascii':False}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞬痘,隨后出現(xiàn)的幾起案子故慈,更是在濱河造成了極大的恐慌,老刑警劉巖框全,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件察绷,死亡現(xiàn)場離奇詭異,居然都是意外死亡津辩,警方通過查閱死者的電腦和手機拆撼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喘沿,“玉大人情萤,你說我怎么就攤上這事∧『蓿” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵娶视,是天一觀的道長晒哄。 經(jīng)常有香客問我睁宰,道長,這世上最難降的妖魔是什么寝凌? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任柒傻,我火速辦了婚禮,結(jié)果婚禮上较木,老公的妹妹穿的比我還像新娘红符。我一直安慰自己,他們只是感情好伐债,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布预侯。 她就那樣靜靜地躺著,像睡著了一般峰锁。 火紅的嫁衣襯著肌膚如雪萎馅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天虹蒋,我揣著相機與錄音糜芳,去河邊找鬼。 笑死魄衅,一個胖子當著我的面吹牛峭竣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晃虫,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼皆撩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了傲茄?” 一聲冷哼從身側(cè)響起毅访,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盘榨,沒想到半個月后喻粹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡草巡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年守呜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片山憨。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡查乒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出郁竟,到底是詐尸還是另有隱情玛迄,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布棚亩,位于F島的核電站蓖议,受9級特大地震影響虏杰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勒虾,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一纺阔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧修然,春花似錦笛钝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掏婶,卻和暖如春啃奴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雄妥。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工最蕾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人老厌。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓瘟则,卻偏偏與公主長得像,于是被迫代替她去往敵國和親枝秤。 傳聞我的和親對象是個殘疾皇子醋拧,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345