普通序列化器和模型无关,只是对针对提交字段的定义。

  本文定义三个序列化器:

  教师序列化器,学生序列化器,教师学生序列化器。这三个序列化器都使用普通序列化器。

1 教师序列化器

  在Applications/Examples/views下创建一个Teachaer.py文件。

from rest_framework import serializers
from Applications.Examples.models import Teachers
from rest_framework.viewsets import ModelViewSet # from rest_framework.response import Response class TeachersSerializer(serializers.Serializer):
"""
【功能描述】教师序列化器
"""
name = serializers.CharField(max_length=50, min_length=2, help_text='教师姓名')
school_id = serializers.IntegerField(help_text='学校ID') def create(self, validated_data):
teacher = Teachers.objects.create(**validated_data)
return teacher def update(self, instance, validated_data):
instance.name = validated_data.get('name')
instance.school_id = validated_data.get('school_id')
instance.save()
return instance class TeachersViewSet(ModelViewSet):
"""
教师视图
"""
queryset = Teachers.objects.all()
serializer_class = TeachersSerializer 

2 学生序列化器

  在Applications/Examples/views下创建一个Student.py文件。

from rest_framework import serializers
from Applications.Examples.models import Students
from rest_framework.viewsets import ModelViewSet # from rest_framework.response import Response class StudentsSerializer(serializers.Serializer):
"""
【功能描述】学生序列化器
"""
name = serializers.CharField(max_length=50, min_length=2, help_text='教师姓名')
SEX_CHOICE = (
(1, '男'),
(2, '女'),
)
sex = serializers.ChoiceField(choices=SEX_CHOICE, required=False, help_text='性别')
SUBJECT_CHOICE = (
(1, '大学语文'),
(2, '微信分'),
(3, '计算机组成原理'),
(4, '计算机网络'),
(5, '英语'),
)
subject = serializers.MultipleChoiceField(choices=SUBJECT_CHOICE, help_text='所选科目')
school_id = serializers.IntegerField(help_text='学校ID') def create(self, validated_data):
teacher = Students.objects.create(**validated_data)
return teacher def update(self, instance, validated_data):
instance.name = validated_data.get('name')
# request=False,表示可传可不传,故需要判定,如果传了则修改,不传则不修改。
if validated_data.get('sex'):
instance.sex = validated_data.get('sex')
instance.subject = validated_data.get('subject')
instance.school_id = validated_data.get('school_id')
instance.save()
return instance class StudentsViewSet(ModelViewSet):
"""
学生视图
"""
queryset = Students.objects.all()
serializer_class = StudentsSerializer

3 教师学生序列化器

  在Applications/Examples/views下创建一个TeachaerStudent.py文件。

from rest_framework import serializers
from Applications.Examples.models import TeacherAndStudent
from rest_framework.viewsets import ModelViewSet # from rest_framework.response import Response class TeacherAndStudentSerializer(serializers.Serializer):
"""
【功能描述】教师学生序列化器
"""
teacher_id = serializers.IntegerField(help_text='教师ID')
student_id = serializers.IntegerField(help_text='学生ID') def create(self, validated_data):
tea_stu = TeacherAndStudent.objects.create(**validated_data)
return tea_stu def update(self, instance, validated_data):
instance.teacher_id = validated_data.get('teacher_id')
instance.student_id = validated_data.get('student_id')
instance.save()
return instance class TeacherAndStudentViewSet(ModelViewSet):
"""
教师学生视图
"""
queryset = TeacherAndStudent.objects.all()
serializer_class = TeacherAndStudentSerializer

4 路由配置

  找到Examples的分路由文件urls.py,增加以上三个路由。

from django.urls import path
from Applications.Examples.views import ExpHome, CoreAPI
from rest_framework.routers import DefaultRouter
from .views.Serializer1 import UserInfoViewSet1
from .views.Serializer2 import UserInfoViewSet2
# from .views.Serializer3 import SchoolsViewSet
from .views.Schools import SchoolsViewSet
from .views.Teacher import TeachersViewSet
from .views.Student import StudentsViewSet
from .views.TeacherStudent import TeacherAndStudentViewSet urlpatterns = [
path('ExpHome/', ExpHome.ExoHome.as_view()),
path('CoreAPI/', CoreAPI.CoreAPI.as_view()),
path('LoginHome/', CoreAPI.LoginHome.as_view()),
# path('Teachers/', TeachersViewSet.as_view()),
]
router = DefaultRouter() # 可以处理视图的路由器
router.register('UserInfo1', UserInfoViewSet1) # 向路由器中注册视图集
router.register('UserInfo2', UserInfoViewSet2) # 向路由器中注册视图集
router.register('Schools', SchoolsViewSet) # 向路由器中注册视图集
router.register('Teachers', TeachersViewSet) # 向路由器中注册视图集
router.register('Student', StudentsViewSet) # 向路由器中注册视图集
router.register('TeacherStudent', TeacherAndStudentViewSet) # 向路由器中注册视图集 urlpatterns += router.urls # 将路由器中的所以路由信息追到到django的路由列表中

0011 基于DRF框架开发(04 普通序列化器)的更多相关文章

  1. 0010 基于DRF框架开发(03 模型序列化器)

    序列化器:是指从数据库提取数据,转化前端所需要的数据格式并返回到前端. 反序列化器:是指把前端传回的数据,转换成数据库需要的格式,存入数据库. DRF提供了两种序列化器: 模型序列化器:是指和模型关联 ...

  2. 0009 基于DRF框架开发(02 创建模型)

    上一节介绍了DRF开发的基本流程,共五个步骤: 1 创建模型 2 创建序列化器 3 编写视图 4 配置URL 5 运行测试 本节主要讲解创建模型. 构建学校,教师,学生三个模型,这三个模型之间的关系是 ...

  3. 0014 基于DRF框架开发(02 基类视图 GenericAPIView)

    前端于对数据操作的请求基本上就分为四类:增删改查,即增加.删除.修改.查询. 而DRF把前端请求分为两个大类:带ID参数请求和不带ID参数请求. 不带ID参数请求包括:增加.分布多条查询 带ID参数请 ...

  4. 0008 基于DRF框架开发(01 DRF开发的基本流程)

    1 创建模型 由于之前在<004 工程配置>中,已在Applications/Organizations/models中创建了一个UserInfo模型.此处引用这个模型. from dja ...

  5. 0012 基于DRF框架开发(04 序列化器的字段与选项)

    1 常用字段类型 字段 构造方式 BooleanField BooleanField() NullBooleanField NullBooleanField() CharField CharField ...

  6. 0013 基于DRF框架开发(01 基类视图 APIView)

    之前学习了模型序列化和普通序列化,我们用最简单的视图和url实现了对序列化的操作. 而实际上,象之前那种由DRF自动生成所有的视图和url的情况,在应用是使用很少.而需要用户根据实际业务需求,自定义视 ...

  7. MapReduce教程(一)基于MapReduce框架开发<转>

    1 MapReduce编程 1.1 MapReduce简介 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,用于解决海量数据的计算问题. MapReduce分成了两个部分: ...

  8. 基于SSH框架开发的《高校大学生选课系统》的质量属性的实现

    基于SSH框架开发的<高校大学生选课系统>的质量属性的实现 对于可用性采取的是错误预防战术,即阻止错误演变为故障:在本系统主要体现在以下两个方面:(1)对于学生登录模块,由于初次登陆,学生 ...

  9. 基于NopCommerce框架开发的微信小程序UrShop

    Urshop小程序商城 介绍 UrShop小程序商城 2.0发布啦,发布地址https://gitee.com/urselect/urshop UrShop 根据NopCommerce框架开发的,基于 ...

随机推荐

  1. 2、HotSpot虚拟机对象探秘

    基于使用优先的原则,以常用的虚拟机HotSpot和常用的内存区域Java堆为例,深入探讨HotSpot虚拟机在Java堆中对象分配.布局和访问的全过程. 1.对象的创建 划分可用空间 在语言层面上,创 ...

  2. ASP.NET Core使用环境变量

    前言 通常在应用程序开发到正式上线,在这个过程中我们会分为多个阶段,通常会有 开发.测试.以及正式环境等.每个环境的参数配置我们会使用不同的参数,因此呢,在ASP.NET Core中就提供了相关的环境 ...

  3. 阿里云服务器ECS Ubuntu18.04 建立新用户

    昨天花了好长时间终于把界面功能弄好了,今天找时间再折腾一下: 1.建立新的用户: ssh连接上,用以下命令建立新用户,并设置密码: 创建普通用户“myname”成功,接下来为用户“myname”赋予s ...

  4. [Effective Java 读书笔记] 第三章类和接口 第二十三-- ??条

    第二十三条 请不要再新代码中使用原生态类型 1 使用原生态类型,就失去了泛型在安全性和表述性方面的所有优势,所以新代码中不要使用原生态类型 2 List<String>可以传递给List作 ...

  5. Nginx 缓存命中率

    # 在http头部显示命中方式 location ~* ^.*\.(js|ico|gif|jpg|jpeg|png)$ { proxy_redirect off; proxy_set_header H ...

  6. Red Team 指南-第1章 红队和红队概述

    第1章 红队和红队概述 贡献者:Tony Kelly @infosectdk # 翻译者 BugMan 什么是红队?它来自哪里? 红队的起源是军事起源.人们意识到,为了更好地防御, 需要攻击自己的防御 ...

  7. Nginx是什么 ? 能干嘛 ?

    学习博客:https://blog.csdn.net/forezp/article/details/87887507 学习博客:https://blog.csdn.net/qq_29677867/ar ...

  8. Java的开发—面向对象的7大原则之开闭原则(一)

    开闭原则(Open Close Principle) 一.定义: 软件中的(类.模块.函数等等)应该对于扩展是开放的,对于修改时关闭的.意味着一个实体允许在不改变它的源代码的前提变更它的行为 这里的软 ...

  9. 10分钟快速搭建可用的springboot-web项目

    搭建步骤 工具准备 1. IntelliJ IDEA(开发工具,简称idea) 2. JDK1.8+ 3. MAVEN 4. mysql(数据库) 5. redis(session储存) 创建步骤 S ...

  10. linux 基础入门(8) 软件安装 rpm、yum与源码安装详解

    8.软件 RPM包安装 8.1rpm安装 rpm[选项]软件包名称 主选项 -i 安装 -e卸载 -U升级 -q查找 辅助选项 -ⅴ显示过程 -h --hash 查询 -a-all查询所有安装的包 - ...