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

  本文定义三个序列化器:

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

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. [redis读书笔记] 第一部分 数据结构与对象 对象特性

    一 类型检查和多态    类型检查,即有的命令是只针对特定类型的,如果类型不对,就会报错,此处的类型,是指的键类型,即robj.type.下面为有类型检查的命令: 对于某一种类型,redis下底层的实 ...

  2. 数据算法 --hadoop/spark数据处理技巧 --(7.共同好友 8. 使用MR实现推荐引擎)

    七,共同好友. 在所有用户对中找出“共同好友”. eg: a    b,c,d,g b    a,c,d,e map()->  <a,b>,<b,c,d,g> ;< ...

  3. coat 彩色的cat

    # 和cat类似,但每一行一种颜色,方便查看 curl -o coat https://raw.githubusercontent.com/oldratlee/useful-scripts/maste ...

  4. 无线网络WPA加密算法基础

    2013-11-13 23:08 (分类:网络安全) 对无线没什么认识,总听说有人蹭网,还有卖蹭网器的,于是补充一下知识. 无线加密有两类:WEP WAP,目前采用WEP加密的非常少了,WEP应该只是 ...

  5. Vscode开发Python环境安装

    VSCode 开发 Python 使用python,主要是做一些工具和爬虫的操作,语法简单,功能复杂,入手很快. 我们通过在 VSCode 中搜索 Python 插件,发现,开发 python 的话, ...

  6. 一次压力测试Bug排查-epoll使用避坑指南

    Bug复现 使用Webbench对服务器进行压力测试,创建1000个客户端,并发访问服务器10s,正常情况下有接近8万个HTTP请求访问服务器. 结果显示仅有7个请求被成功处理,0个请求处理失败,服务 ...

  7. 1163 - Bank Robbery

    1163 - Bank Robbery   In one very cold morning, Mark decides to rob a bank. But while trying hacking ...

  8. C#调用Windows API(示例:显示任务管理器里的程序名称)

    作为初学者来说,在C#中使用API确是一件令人头疼的问题. 在使用API之前你必须知道如何在C#中使用结构.类型转换.安全/不安全代码,可控/不可控代码等许多知识. 在.Net Framework S ...

  9. Blazui 常见问题:我更新了数据,为什么界面没刷新?

    首发于:http://www.blazor.group:8000/topic/reply?tpid=9 开门见山,不介绍,不废话 建议食用本文前先食用 https://www.cnblogs.com/ ...

  10. Linux内存管理解析(三) : 内核对内核空间的内存管理

    内核采用 struct page 来表示一个物理页,在其中记载了诸多物理页的属性,比如 物理页被几个线程使用(如若没有则表示该页可以释放),页对应的虚拟地址. 首先需要知道的是,分配物理页可以分为两个 ...