24.Django_framework_序列化

上一篇說了使用Django傳統寫CRUD的痛點,那麼現在就說解決這些痛點的方法

Django REST framework

  • 簡稱爲DRF框架或者REST freamwork框架
  • 是在Django框架的基礎上,進行二次開發的
  • 適用於構建符合RESTful風格的API

一、特性

  • 提供了強大的Serializer序列化器,可以高效地進行序列化與反序列化操作
  • 提供了豐富的類視圖、Mixin擴展類、ViewSet視圖集
  • 強大的排序,過濾,分頁,搜索,限流等功能
  • 多種身份權限認證
    = 可擴展性,插件豐富
  • 提供了直觀的Web API界面

二、序列化器

數據校驗

  • 判斷用戶輸入的數據是否異常

數據轉換

  • 反序列化
    前端傳入的數據格式(json,xml,text)=>程序中的數據類型

  • 序列化
    程序中的數據類型->數據格式(前端可以處理的數據,如json,xml,text)

三、序列化:

單個結果的查詢集
修改上一篇的代碼_根據id查詢User信息

1.安裝

pip install djangorestframework

2.配置

settings.pyINSTALLED_APPS中,添加rest_framework

'rest_framework'

3.查詢單個結果的結果,使用ID獲取項目:

3.1.創建項目序列化器類:

需要序列化輸出哪些字段,那麼就在序列化器中定義這些字段
新建projects/serializer.py文件:

from rest_framework import serializers

class ProjectsSerializer(serializers.Serializer):
    """
    創建項目序列化器類:需繼承Serializer類或其子類
    """
    # 和model類的字段進行對比;注意:max_length的位置需注意,並且有些類型是沒有這個字段的
    # label:相當於verbose_name
    # help_text:相當於幫助信息
    # max_length:最大長度
    # !!下面兩個是配對的
    # allow_null:相當於null(指定字段非必填,否則是必填)
    # allow_blank:相當於blank(指定字段非必填,否則是必填)


    #和model中字段可以不一致,需要用就顯示哪些
    name = serializers.CharField(label='用戶名', max_length=128, help_text='用戶名' )
    leader = serializers.CharField(label="負責人", max_length=50, help_text="負責人")
    tester = serializers.CharField(label="測試人員", max_length=50, help_text="測試人員")
    programer = serializers.CharField(label="開發人員", max_length=50, help_text="開發人員")
    publish_app = serializers.CharField(label="發佈應用", max_length=50, help_text="發佈應用")
    desc = serializers.CharField(label="簡要描述", max_length=200, help_text="簡要描述")
3.2、在view的接口中使用序列化器
步驟:
  • a.傳遞查詢集給序列化器的instance參數,獲得序列化器對象
  • b.從序列化對象的data獲取序列化後的dict類型的數據

例子:修改projects/views.py中根據id查詢project信息的接口

    def get(self,request,pk):
    
          project = Projects.objects.get(id=pk)
        # 1.傳遞查詢集給序列化器,並返回序列化器對象
        serializer = ProjectsSerializer(instance=project)

        # 2.通過序列化器對象的data屬性,獲取序列化後的dict

        return JsonResponse(serializer.data)
3.3.訪問http://127.0.0.1:8886/users/9

在這裏插入圖片描述

4.多個結果的查詢集

獲取項目列表:
步驟和之前一樣,只不過因爲需要序列化的內容中包含多個結果的查詢集,所以在傳遞查詢集給序列化器處理的時候,需要定義many=True

    def get(self,request):
        #1>從數據庫獲取所有項目信息,列表格式
        projects_qs = Projects.objects.all()
        # 查詢集中有多個結果,需要定義many=True
        serializer = ProjectsSerializer(instance=projects_qs,many=True)
       #JsonResponse第一個參數只能默認爲dict字典,如果未其餘類型需要修改safe=False
        return JsonResponse(serializer.data,safe=False)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章