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

  本文定义三个序列化器:

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

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. 动手学习pytorch——(3)多层感知机

    多层感知机(multi perceptron,MLP).对于普通的含隐藏层的感知机,由于其全连接层只是对数据做了仿射变换,而多个仿射变换的叠加仍然是一个仿射变换,即使添加更多的隐藏层,这种设计也只能与 ...

  2. Vue实战之【企业开发常见问题】

    1.vue框架使用注意事项和经验 1.1 解决Vue动态路由参数变化,页面数据不更新 问题描述: 遇到动态路由如:/page/:id 从/page/1 切换到 /page/2 发现页面组件没有更新 解 ...

  3. 《Head first设计模式》之外观模式

    外观模式提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用. 我们已经知道适配器模式是如何将一个类的接口转换成另一个符合客户期望的接口的.现在我们要看一个改变 ...

  4. 使用gRPC-Web从浏览器调用.NET gRPC服务

    我很高兴宣布通过.NET对gRPC-Web进行实验性支持.gRPC-Web允许从基于浏览器的应用程序(例如JavaScript SPA或Blazor WebAssembly应用程序)调用gRPC. . ...

  5. 关键两步+6个要点,让Windows应用程序享有K8S的绝佳优势

    本文来自Rancher Labs 前  言 实际上,没有一个迁移路径能够适用于将所有传统应用程序迁移到云.这些应用程序通常在物理机.虚拟机或本地.虽然一般情况下是重新设计应用程序架构以适用云原生服务, ...

  6. 将jsp页面转化为图片或pdf升级版(二)(qq:1324981084)

    java高级架构师全套vip教学视频,需要的加我qq1324981084 上面我们已经将jsp页面转化成html页面了,那么接下来我们的目标是利用这个html页面形成pdf或图片格式.这里我用到的是w ...

  7. redis_入门

    Redis_day01 1. NoSql 1.1 NoSql是什么 NoSQL(不仅仅是SQL not only SQL),泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在处 ...

  8. [红日安全]Web安全Day2 - XSS跨站实战攻防

    本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...

  9. java工作流系统jflow表单引擎字段扩展组件介绍

    关键词:工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流  bpm工作流系统  java工作流主流框架  自定义工作流引擎 表单设计器  流程设计器 装饰类图片 用于 ...

  10. AndroidStudio报错:Could not download gradle.jar:No cacahed version available for offline mode

    场景 在讲Android Studio 的.gradle目录从默认C盘修改为 别的目录后,新建app提示: Could not download gradle.jar:No cacahed versi ...