DRF many serialization and deserialization
Serialization
Process out of the library, the data is read from the database and in the form of front-end for the json
Deserialization
The storage process, the incoming data is from the front end to views.py function or class spooled logic processing, the final written to the database.
Installation djangorestframework
pip install djangorestframework
Sign up to
INSTALL_APPS
theINSTALLED_APPS = [ ... 'rest_framework', ]
Configuration database
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'tutorial', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': 'ocnt-123', 'OPTIONS':{ "init_command":"SET foreign_key_checks = 0;",# 禁用外键约束 } } }
新增老师类和学生类
from django.db import models
# 创建老师模型
class Teacher(models.Model):
# 教师名称
name = models.CharField(max_length=32,unique=True)
# 添加时间
addtime = models.DateTimeField(auto_now_add=True)
class Meta:
# 指定表名
db_table = 'teacher'
# 创建学生模型,一个学生只能选择一个老师
class Student(models.Model):
# 学生名称
name = models.CharField(max_length=32,unique=True)
# 添加时间
addtime = models.DateTimeField(auto_now_add=True)
# 外键 与Teacher类绑定
teacher = models.ForeignKey('Teacher',on_delete=models.CASCADE)
class Meta:
# 指定表名
db_table = 'student'
新增视图函数类 TeacherView
from rest_framework.views import APIView from rest_framework.response import Response from .serializers import TeacherSerializer,StudentSerializer from . import models # 创建用户视图类 class TeacherView(APIView): # 获取用户信息 def get(self,request): data = models.Teacher.objects.all() info = TeacherSerializer(data,many=True) return Response({ "status":200, "msg":"", "data":info.data }) # 添加用户 def post(self,request): data = request.data flag = models.Teacher.objects.create(**data) if not flag: return Response({"status":201,"msg":"添加数据失败","data":[]}) return Response({"status":200,"msg":"","data":[]}) # 编辑用户 def put(self,request): id = request.data.pop("id") flag = models.Teacher.objects.filter(id=id).update(**request.data) if not flag: return Response({ "status":201, "msg":"编辑失败", "data":[] }) return Response({ "status":200, "msg":"编辑成功", "data":"" }) # 删除用户 def delete(self,request): id = request.data.pop('id') teacher = models.Teacher.objects.filter(id=id).delete() if not teacher[0]: return Response({ "status": 201, "msg": "删除失败", "data": [] }) return Response({ "status": 200, "msg": "删除成功", "data": "" })
新增视图函数类 StudentView
# 学生视图 class StudentView(APIView): # 获取数据 def get(self,request): data = models.Student.objects.all() info = StudentSerializer(data,many=True) return Response({ "status":200, "msg":"", "data":info.data }) # 添加数据 def post(self,request): data = request.data flag = models.Student.objects.create(**data) if not flag: return Response({ "status":201, "msg":"学生添加失败", "data":[] }) return Response({ "status":200, "msg":"学生添加成功", "data":[] }) # 编辑数据 def put(self,request): id = request.data.pop('id') flag = models.Student.objects.filter(id=id).update(**request.data) if not flag: return Response({ "status":201, "msg":"数据编辑失败", "data":[] }) return Response({ "status":200, "msg":"数据编辑成功", "data":[] }) # 删除数据 def delete(self,request): id = request.data.get('id') student = models.Student.objects.filter(id=id).delete() if not student[0]: return Response({ "status":201, "msg":"删除失败", "data":[] }) return Response({ "status":200, "msg":"删除成功", "data":[] })
序列化类 serializers.py
from rest_framework import serializers from . import models # 老师数据序列化 class TeacherSerializer(serializers.ModelSerializer): class Meta: model = models.Teacher fields = '__all__' # 学生数据序列化 class StudentSerializer(serializers.ModelSerializer): class Meta: model = models.Student fields = '__all__'
二级路由 urls.py
from django.urls import path from . import views urlpatterns = [ path('teacher/',views.TeacherView.as_view()), path('student/',views.StudentView.as_view()), ]
address
GET http://127.0.0.1:8000/snippets/teacher/
POST http://127.0.0.1:8000/snippets/teacher/
PUT http://127.0.0.1:8000/snippets/teacher/
DELETE http://127.0.0.1:8000/snippets/teacher/
GET http://127.0.0.1:8000/snippets/student/
POST http://127.0.0.1:8000/snippets/student/
PUT http://127.0.0.1:8000/snippets/student/
DELETE http://127.0.0.1:8000/snippets/student/
Gets the name of the teacher how many students
serializers.py
from rest_framework import serializers from . import models # 学生数据序列化 class StudentSerializer(serializers.ModelSerializer): class Meta: model = models.Student fields = '__all__' # 老师数据序列化 class TeacherSerializer(serializers.Serializer): id = serializers.IntegerField() name = serializers.CharField(max_length=32) student_set = StudentSerializer(many=True,read_only=True)
Call this address
GET http://127.0.0.1:8000/snippets/teacher/
Obtain student teacher who is?
serializers.py
from rest_framework import serializers from . import models # 学生数据序列化 class StudentSerializer(serializers.ModelSerializer): teacherName = serializers.CharField(source='teacher.name') class Meta: model = models.Student fields = ('id','name','teacherName') # 老师数据序列化 class TeacherSerializer(serializers.Serializer): id = serializers.IntegerField() name = serializers.CharField(max_length=32) student_set = StudentSerializer(many=True,read_only=True)
Call this address
GET http://127.0.0.1:8000/snippets/teacher/