DRF-->1 序列化组件的使用和接口设计---get

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

废话不多说,直接上代码!!!

DRF序列化可以理解这几句

                    - 导入模块:from rest_framework import serializers
                    - 建立一个序列化类
                        class BookSerializer(serializers.Serializer):
                            字段可以自定义

                    - 获取客户端请求数据
                    - 开始序列化
                        serialized_data = BookSerializer(origin_data, many=True)
                    - 写入数据库
                    - 获取序列化后的数据,返回给客户端
                        return Response(serialized_data.data)

1.接口设计:

          GET       127.0.0.1:8000/books/     # 获取所有数据,返回值: [{}, {}]
                GET       127.0.0.1:8000/books/{id} # 获取一条数据,返回值:{}
                POST      127.0.0.1:8000/books/     # 新增一条数据,返回值:{}
                PUT       127.0.0.1:8000/books/{id} # 修改数据,返回值:{}
                DELETE    127.0.0.1:8000/books/{id} # 删除数据,返回空

2.创建新的项目

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

    def __str__(self):
        return self.name

class Publish(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=32)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Book(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    # 外键字段
    publish = models.ForeignKey(to="Publish", related_name="book", related_query_name="book_query", on_delete=models.CASCADE)
    # 多对多字段
    authors = models.ManyToManyField(to="Author")

3进行数据的迁移执行命令

python manage.py makemigrations
python manage.py migrate

4.开始创建视图和路由

urls.py
from django.contrib import admin
from django.urls import path
from app1 import views

urlpatterns = [
    path(‘admin/‘, admin.site.urls),
    path(‘books/‘,views.BookView.as_view()),
]

views.pyfrom rest_framwork.views import APIViewfrom rest_framwork import serializersfrom rest_fromwork.response import Response
class BookView(APIView):
    def get(self,request):
        book_list = Book.objects.all()
        # print(book_list)
#进行数据的序列化
        serializer_book_list = BookSerializer(book_list,many=True)
#返回的时候必须带着data,因为所有的数据都在data里
        return Response(serializer_book_list.data)

    def post(self,request):
        pass

5.创建序列化的类

urls.py
calss BookSerializer(serializers,Serializer):
    title = serializers.CharField(max_length=32)
    price = serializers.DecimalField(max_digits=5,decimal_places=2)
    publish = serializers.CharField(max_length=32)
    author= serializers.CharField(max_length=32)

6.注意,现在的页面是这样的

7.改进的办法,也就是说我们序列化的重头戏‘

url.py

class BookSerializer(serializers.Serializer):
    title = serializers.CharField(max_length=32)
    price = serializers.DecimalField(max_digits=5,decimal_places=2)
    publish = serializers.CharField(max_length=32)
    #这里必须是用SerializerMethodField()!!!
    authors_list = serializers.SerializerMethodField()
#方法里有一个get_方法,注意!!!authors_list必须和上边的序列化一致否则报错找不到对应的方法!
    def get_authors_list(self,book_obj):
        author_list = list()
        for author in book_obj.authors.all():
            author_list.append(author.name)
        return author_list

原文地址:https://www.cnblogs.com/lzqrkn/p/10079592.html

时间: 2024-07-31 02:04:24

DRF-->1 序列化组件的使用和接口设计---get的相关文章

RESTful【第三章】:序列化组件的使用及接口设计

序列化组件的使用及接口设计 一.Django原生的serializer(序列化) 使用步骤: 1.导入模块 from django.core.serializers import serialize 2.获取queryset 3.对queryset进行序列化 4.将序列化后的数据,响应给客户端 实例: #1.导入Django自带的原生的序列化模块 from django.core.serializers import serialize class CourseView(APIView): de

DRF-->2序列化组件的使用和接口设计--get,post,put,delete&优化组件

!!!!! !!!!! 记住这个图 !!!!! 上篇博客说道DRF序列化组件的get,只是简单的举一个实例,然而在现实生活中我们前后端进行交互的时候更多的用到了Json数据格式,这也就是说前后端交互的时候用到的更多序列化,但同时也会有大量的重复性的代码,举个简单的例子,就上片博客---get请求的时候,只是一个简单的get请求,还有put,updata,post,delete请求的时候呢,代码没有任何的优化,在这里我们再来说一下序列化和代码优化的结合,以供后来人参考,不多说直接上代码 1.这里我

drf框架 - 序列化组件

drf框架 - 序列化组件 序列化与反序列化 序列化: 将对象序列化成字符串用户传输 反序列化: 将字符串反序列化成对象用于使用 drf的序列化与反序列化 序列化: 将Model类对象序列化成字符串用户传输 反序列化: 将字符串反序列化成Model对象用于使用 Serializer 序列化准备: 模型层: models.py class User(models.Model): SEX_CHOICES = [ [0, '男'], [1, '女'], ] name = models.CharFiel

drf框架 - 序列化组件 | Serializer

序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer(辅助群改) 序列化与反序列化 序列化: 将对象序列化成字符串用户传输 反序列化: 将字符串反序列化成对象用于使用 drf的序列化与反序列化 序列化: 将Model类对象序列化成字符串用户传输 反序列化: 将字符串反序列化成Model对象用于使用 Serializer 序列化准备: 模型层: models.py class User(models.Model): SE

Django中rest_framework的认证组件,权限组件,频率组件,序列化组件的最简化版接口

url urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.Login.as_view()), # Book表 url(r'^books/$',views.BookHandle.as_view({ 'get':'list', 'post':'create' })), url(r'^books/(?P<pk>\d+)/',views.BookHandle.as_view({ 'get':'retrieve

drf 核心 序列化组件Serializer

知识点: Serializer(偏底层).ModelSerialize(重点).ListModelSerializer(辅助群改) 一.Serializer 1.序列化准备: 模型层:models.py class User(models.Model): SEX_CHOICES = [ [0, '男'], [1, '女'], ] name = models.CharField(max_length=64) pwd = models.CharField(max_length=32) phone =

django rest framework 解析器组件 接口设计,视图组件 (1)

一.解析器组件 -解析器组件是用来解析用户请求数据的(application/json), content-type 将客户端发来的json数据进行解析 -必须适应APIView -request.data触发 二.序列化组件 2.1.django 自带组件serializer 2.1.1 from django.serializers import serialize2.1.2 origin_data = Book.objects.all()2.1.3 serialized_data = se

Restful framework【第三篇】序列化组件

基本使用 -序列化 -对象,转成json格式 用drf的序列化组件 -定义一个类继承class BookSerializer(serializers.Serializer): -写字段,如果不指定source,字段名必须跟数据库字段名对应(source指定的值跟字段名不能重复) -source还可以指定方法 -publish=serializers.SerializerMethodField() def get_publish(self,obj): obj.publish #obj.author

DjangoRestFramework学习二之序列化组件、视图组件

目录 DjangoRestFramework学习二之序列化组件.视图组件 一 序列化组件 二 视图组件(Mixin混合类) DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 首先按照restful规范咱们创建一些api接口,按照下面这些形式写吧: Courses --- GET ---> 查看数据----->返回所有数据列表[{},{},] Courses--- POST --->添加数据 -----> 返回添加的数据{ } course