Django——restframework(serializers序列化工具)

建立虛擬環境數據庫

(1)建立一個django的虛擬環境django

  

cd 到一個空的文件夾   pip install virtualenv   pip install --no--site--packages 項目名稱   cd 項目目錄   Scripts\activate   pip install django==1.11.11 -i https://pypi.tanu.tsinghua.edu.cn/simple   pip install djangorestframework   完成安裝

 

(2)打開項目:json

建表:app

from django.db import models # Create your models here. # 文章表
class Article(models.Model): title = models.CharField(max_length=32) # 建立文章的時候生成的時間
    create_time = models.DateField(auto_now=True) # 更新文章時生成的時間
    update_time = models.DateField(auto_now_add=True) type=models.SmallIntegerField( choices=((1,'原創'),(2,'轉載')), default = 1 ) school = models.ForeignKey(to = 'School',on_delete = models.CASCADE) tag = models.ManyToManyField(to='Tag') # 學校表
class School(models.Model): name = models.CharField(max_length=16) # 標籤表
class Tag(models.Model): name = models.CharField(max_length=16)

 

數據序列化工具

第①種方式:spa

  直接使用json進行序列化數據。rest

from django.shortcuts import render,HttpResponse,redirect,reverse from app01 import models #使用json 對數據庫的數據進行序列化
def article_list(request): # 去數據庫查詢全部的文章數據
    query_set = models.Article.objects.all().values('id','title','create_time','type') # 序列成json格式
    # 把時間格式轉化成字符串格式
    for i in query_set: i['create_time'] = i['create_time'].strftime('%Y-%m-%d') import json # json 不可以序列化query_set對象,因此咱們在這裏將query_set裝換成list數據類型。
    data = json.dumps(list(query_set),ensure_ascii=False) # 返回
    return HttpResponse(data)

 

第②種方式:code

  from django.http import JsonResponse(利用Django中的JsonResponse來對數據進行序列化)對象

from django.shortcuts import render,HttpResponse,redirect,reverse from app01 import models #利用JsonResponse的方式實現數據的序列化
from django.http import JsonResponse def article_list(request): # 去數據庫查詢全部的文章數據
    query_set = models.Article.objects.all().values('id','title','create_time','type') # 序列成json格式
    # 把時間格式轉化成字符串格式
    # 返回
    # JsonResponse 只能序列化字典/列表,序列化列表須要加safe參數
    return JsonResponse(list(query_set),safe=False)

 

 

第③種使用方式(沒有ORM類用這種,像關係型數據庫Redis):blog

    定義一個類 分別序列化某個表中的字# 使用工具serializer工具對數據 進行序列化from django.http import JsonResponse

from rest_framework import serializers class ArticleSerialize(serializers.Serializer): id = serializers.IntegerField() title = serializers.CharField() create_time = serializers.DateField() type = serializers.IntegerField(source=‘get_type_display’) 
  school = serializers.CharField(source='school.name')
 // 在 choice字段和FK(外鍵)字段中均可以使用source = 'get_字段名_display' 來獲取 對應對象的值
  tag =serializers.SerializerMethodField()
  def get_tag(self,obj):
        print("====>",obj.tag.all())
        tag_list =[]
        for i in obj.tag.all():
           tag_list.append(i.name)
        return tag_list

  // 在多對多字段中,能夠在類下面定義一個‘get_字段名’的方法,來獲取多對多中對應對象的值。
def article_list(request): # 去數據庫查詢全部的文章數據 query_set = models.Article.objects.all()

  # 由於這裏的query_set中有多個數據,因此這裏加了一個many = True的參數 article_obj
= ArticleSerialize(query_set,many=True) return JsonResponse(article_obj.data,safe = False) def article_detail(request,id): article_obj = models.Article.objects.filter(id = id).first()
  
  
  # 由於這裏的article_obj中只有一個對象,因此這裏並無加many= True參數 art_detail
= ArticleSerialize(article_obj) return JsonResponse(art_detail.data)

 

第④種方法(有ORM類有這種):

class Serialitor(serializers.ModelSerializer): type = serializers.CharField(source='get_type_display') // 取到1or2中的值 class Meta:
      // 定義須要使用的表 model
= models.Article
      // 定義須要序列化的字段 fields
= "__all__" or ['id','title']   // 是否須要聯表,及聯表的個數
     depth
= 1 # 推薦不超過10層(這裏寫的時外鍵關聯表的個數) def article_list(request): # 去數據庫查詢全部的文章數據 query_set = models.Article.objects.all() article_obj = ArticleSerialize(query_set,many=True) return JsonResponse(article_obj.data,safe = False) def article_detail(request,id): article_obj = models.Article.objects.filter(id = id).first() art_detail = ArticleSerialize(article_obj) return JsonResponse(art_detail.data)

直接定義一個Serialitor類,在下面直接調用就好啦。

相關文章
相關標籤/搜索