django之djangorestframework序列化操作


只介紹序列化操作:serializers.ModelSerializer 與 serializers.Serializer

使用序列化的目的:將數據序列化成  JSON 對象

當頁面上需要動態加載內容,后端需要利用 json 的格式向前端返回數據, 這是如果model模型中存在外鍵關聯,則只能講關聯的ID發送給前端,從而無法正確顯示數據,這是就需要通過序列化操作來包裝

一、安裝djangorestframework:

  1. 進入運行環境終端

  2. 輸入:pip install djangorestframework

  3. 需要在 django 項目的 settings.py 文件中進行配置:

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
       # 配置 rest_framework
    'rest_framework',
    ]

二、serializers.ModelSerializer 操作(推薦使用)

    models.py:創一個模型

from django.db import models
# 新聞類型 數據庫模型
class Newscategory(models.Model):
    newsname = models.CharField(max_length=100)
# 新聞 數據庫模型
class News(models.Model):
    # 標題
    title = models.CharField(max_length=100,null=False)
    # 描述
    desc = models.CharField(max_length=200)
    # 縮略圖地址
    thumbnailUrl = models.URLField()
    # 新聞內容
    newsContent = models.TextField()
    # 發布日期
    pub_time = models.DateTimeField(auto_now_add=True)
    # 新聞類型(外鍵關聯模型:Newscategory)
    category = models.ForeignKey('Newscategory',on_delete=models.SET_NULL,null=True)

   serializers.py:創建一個序列化模塊,並添加序列化類

# 導入序列化操作模塊:serializers
from
rest_framework import serializers from .models import News, Newscategory# 對 NewsCategory 模型進行序列化 class NewsCategorySerializer(serializers.ModelSerializer): class Meta: model = Newscategory fields = ('id', 'newsname') # 對 News 模型進行序列化 class NewsSerializer(serializers.ModelSerializer): # 指定字段 category 使用的序列化是 NewsCategorySerializer() # 因為在 News 模型中,字段 category 是一個外鍵,如果直接序列化,那么只會返回 category 的外鍵id # 序列化后,可以返回序列化后的數據,格式大致為:{'title':'xxx',category:{'id':1,'newsname':'xxxx'}} category = NewsCategorySerializer()class Meta: # 指定需要序列化的模型 model = News # 指定需要序列化的字段 fields = ('title', 'desc', 'thumbnailUrl', 'pub_time', 'category')

   views.py:創建一個視圖函數(API),測試我們寫的序列化操作是否正確

  # 導入序列化模塊中的序列化類,如:from serializers import NewsSerializer
  from django.http import JsonResponse
  def serializersTest:   
    # 獲取數據
    news = News.objects.order_by('-pub_time').all()
    # 將 news 對象進行序列化
  # 屬性 many=True:設置是否將 news 所有字段序列化
     # 實例化序列化對象,如果不設置會拋出異常:Got AttributeError when attempting to get a value for field `title` on serializer `NewsSerializer`.
      news_serializer = NewsSerializer(news,many=True)
      # 獲得序列化后的結果(json數據)
     data = news_serializer.data
    # 序列化后是一個JSON對象,將Json對象放回到前端   
return JsonResponse(data=data)

測試步驟:

    1. 將views.py中的serializersTest映射到urls.py中

    2. 在瀏覽器中直接對地址進行訪問:會返回一串Json字符串(也可以使用接口測試工具進行測試:postman等)

 

三. serializers.Serializers操作:

  與django中的表單操作類似,具體上百度查看相關文檔,如csdn:https://blog.csdn.net/l_vip/article/details/79156113

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM