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

  本文定义三个序列化器:

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

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. java jdk1.8 32/64位 官方绿色版下载附安装教程

    java jdk1.8 32/64位 官方绿色版下载附安装教程 地址:https://www.jb51.net/softs/691593.html

  2. 分组密码CBC加密缺陷

    title: 分组密码CBC加密缺陷 date: 2017-05-15 10:04:47 tags: ["密码学"] --- 关于密码学的种种漏洞以及利用网上也有不少,但是比较零散 ...

  3. 线索二叉树C++实现

    #include<iostream> #include<stdlib.h> #define maxsize 100 using namespace std; typedef s ...

  4. 【JavaScript】进制转换&位运算,了解一下?

    前言 在一般的代码中很少会接触到进制和位运算,但这不代表我们可以不去学习它.作为一位编程人员,这些都是基础知识.如果你没有学过这方面的知识,也不要慌,接下来的知识并不会很难.本文你将会学习到: 进制转 ...

  5. php curl 检测网页是否被百度收录

    <?php /* * 检测百度是否收录网页 curl模式 * @ param string $url传入的url* return int (1 收录 0 不收录) */ function che ...

  6. centos6.5下编译安装单实例MySQL5.5

    MySQL5.5版本安装3步曲: 1) cmake 2) make 3) make install 查看系统版本号 [root@meinv01 ~]# cat /etc/redhat-release ...

  7. 【转载】详解linux下的串口通讯开发

    来源:https://www.cnblogs.com/sunyubo/archive/2010/09/26/2282116.html 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使 ...

  8. MySQL中的幻读,你真的理解吗?

    昨天接到阿里的电话面试,对方问了一个在MySQL当中,什么是幻读.当时一脸懵逼,凭着印象和对方胡扯了几句.面试结束后,赶紧去查资料,才发现之前对幻读的理解完全错误.下面,我们就聊聊幻读. 要说幻读,就 ...

  9. Java第一次代码作业汇总

    练习题1:(完数问题) 求100以内的所有完数.(完数:它所有因子之和等于其本身)   方法一: /* 解体思路:1.先找出每个数的所有因子 2.比较因子之和是否与其数本身相等 */ public c ...

  10. 【题解】 2月19日 厦门双十中学NOIP2014模拟D2 T2 采药人接水果

    [问题描述] 采药人虽然 AFO(SU),但他在闲暇的时候还是可以玩一玩接水果(cat)的.但他渐渐发现 cat 好像有点太弱智.于是他不想浪费他的智商,于是决定写一个程序帮他玩. cat 是这样玩的 ...