DRF(Django Rest Framework)序列化组件接口使用和接口设计--!GET接口设计!

明瞳 2020-02-17

定义序列化器(本质就是一个类),一般包括模型类的字段,有自己的字段类型规则。实现了序列化器后,就可以创建序列化对象以及查询集进行序列化操作,通过序列化对象.data来获取数据(不用自己构造字典,再返回Json数据)

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘apps.apps.AppsConfig‘,
    ‘app01‘,
    ‘rest_framework‘, #把drf组件注册进去
]

项目主目录/settings.py

from django.db import models

# Create your models here.
class Book(models.Model):
    nid = models.IntegerField(primary_key=True)
    title = models.CharField(max_length=32)
    #第三张表
    author = models.ManyToManyField(to=‘Author‘)
class Publish(models.Model):
    nid = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=32)
    address = models.CharField(max_length=32)
    email = models.EmailField(max_length=128)

class Author(models.Model):
    nid  = models.IntegerField(primary_key=True)
    name =models.CharField(max_length=32)
    age = models.IntegerField()

app01/models.py

from django.shortcuts import render
from django.db import models
from .models import Book
from .models import Publish
from .models import Author

# Create your views here.
from apps.models import Course
from django.core.serializers import serialize
from rest_framework.views import APIView
from rest_framework import serializers
from rest_framework.response import Response

#创建一个序列化类
class BookSerizlizer(serializers.Serializer):
    nid = serializers.CharField(max_length=10)
    title = serializers.CharField(max_length=32)
    #把书本关联的作者添加到数据池中
    author = serializers.SerializerMethodField()
    #创建一个方法必须 :get_字段名,并传入一个对象。
    def get_author(self,book_obj):
        author_list = list()
        for a in book_obj.author.all():
            author_list.append({‘name‘:a.name,‘age‘:str(a.age)})

        return author_list



class Courses(APIView):
    def get(self,request):
        old_data = Book.objects.all()
        #开始序列化json数据
        new_data = BookSerizlizer(old_data,many=True)
        print(Response)
        #将序列化之后的数据,响应给客户端
        return Response(new_data.data)

    def post(self,request):
        pass
 

相关推荐

inspuryhq / 0评论 2020-07-28