普通序列化器和模型无关,只是对针对提交字段的定义。
本文定义三个序列化器:
教师序列化器,学生序列化器,教师学生序列化器。这三个序列化器都使用普通序列化器。
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的路由列表中
浙公网安备 33010602011771号