标签:meta 成功 asc lse 创建 command ima 创建用户 pos
序列化
出库的过程,是从数据库中把数据读出并以json的形式供前端使用
反序列化
入库的过程,是从前端将数据传入到views.py的函数或者类中,经过后台逻辑处理,最终写到数据库中。
安装 djangorestframework
pip install djangorestframework
注册到INSTALL_APPS
中
INSTALLED_APPS = [
...
'rest_framework',
]
配置数据库
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()),
]
访问地址
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/
获取老师名下有多少个学生
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)
调用此地址 GET http://127.0.0.1:8000/snippets/teacher/
获取学生的老师是谁?
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)
调用此地址 GET http://127.0.0.1:8000/snippets/teacher/
标签:meta 成功 asc lse 创建 command ima 创建用户 pos
原文地址:https://www.cnblogs.com/wuxiaoshi/p/11974279.html