json 支持多种数据格式–序列化
post/add-goods
post/delete-goods
post/update-goods
GET/get-goods
restful就是写API 的接口的规范
请求方式
GET;获取数据
POST;提交数据,
put;提交数据,更新数据(修改),
delete;删除数据
DRf
pip install djangorestframework -i
序列化:将模型层的数据转换成json格式的数据称为序列化
反序列化:就是把前端发送过来的json数据,变为模型的是数据
200 OK - [GET] # 服务器成功返回用户请求的数据
201 CREATED - [POST/PUT/PATCH] # 用户新建或修改数据成功。
202 Accepted - [*] # 表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE] # 用户删除数据成功。
from rest_framework.views import APIView
from.models import Teacher
from rest_framework.response import Response
from rest_framework.views import APIView
from .serializers import TeacherSerializer
class TeacherDetailViews(APIView):
#定义get方法 对应get请求方式实现查询的操作
def get(self,request,pk): #pk代表查询指定的老师信息
#通过pk查询具体老师信息
try: #后面存放可能出现的异常的代码
teacher=Teacher.objects.get(id=pk)
except Exception as e: #出现异常时执行的代码
print(e) # 打印我的异常
#如果出现异常返回信息not found 并且返回404的状态码
return Response({‘msg’:“not fount”},status=404)
#创建序列化对象 根据序列化器来创建对象 对象名=序列化器(内容)
# 序列化转json
ser=TeacherSerializer(teacher)
#将解析的数据转换json数据— .data 是ser 中的需要返回的数据
# 前端看见的代码是json 数据
return Response(ser.data)
def delete(self,request,pk):
#删除语法 模型类.object.filter().delete()
teacher= Teacher.objects.filter(id=pk).delete()
return Response(status=204)
修改
def put(self,request,pk):
#先找到要修改的数据,在进行修改
try:
teacher=Teacher.objects.get(id=pk)
except Exception as e:
print(e)
return Response(
{'msg':'没有该数据'},status=404
)
#h获取数据
data=request.data
#创建序列化对象
ser=TeacherSer(teacher,data=data)
ser.is_valid(raise_exception=True)
ser.save() #序列化器中创建update 方法
return Response(status=201)
class TeacherAll(APIView):
#获取数据
def get (self,request):
# 获取数据库中老师全部信息
teacher=Teacher.objects.all()
# 将获取的数据转换为json数据 对象名=序列化器(内容)
#多个数据是many=True
ser=TeacherSerializer(teacher,many=True)
#.data 是返回数据
return Response(ser.data)
#添加数据
def post(self,request):
#接收发送的请求—接收过来前端的数据
data=request.data
# 创建 序列化器对象 对象名=序列化()data=序列器中的参数处理数据的
ser2=TeacherSer(data=data)
#验证 如果有错误直接 返回错误信息
ser2.is_valid(raise_exception=True)
#保存数据 --提交到数据库
ser2.save() #调用save()保存方法需要在序列化器中创建create函数
return Response(ser2.data,status=201)
普通序列化器
serialize.py
#创建自己的序列化器--写模型类一样
from rest_framework import serializers
#定义序列化器的名字
class TeacherSerializer(serializers.Serializer):
name=serializers.CharField()
age=serializers.IntegerField()
gender=serializers.CharField()
def create(self,data): # data 就是形参格式是字典,存储的数据就是需要的
# 添加的数据,如{"name":nmm,'age';37,'gender':‘女'}
#在方法中利用模型类创建对象 对象=模型类.objects.create(data)
# ** 就是将字典进行拆包,按照键值对的形式传入到create()里
teacher= Teacher.objects.create(** data)
return teacher
def update(self,instance,validated_data):
#instance 需要修改的实例对象 这个序列化器对应的是老师 instance代表老师
# instance 要更新的数据,validated_data 是新数据
# validated_data 需要修改的数据
instance.name = validated_data.get('name')
instance.age=validated_data.get('age')
instance.gender = validated_data.get('gender')
#修改之后的数据
instance.save()
return instance
模型类序列化器
’
from .models import Student
from rest_framework import serializers
class StudentSer(serializers.ModelSerializer):
class Meta:
model=Student # 指明需要序列化的模型类
fields= "__all__" # 指明模型类的全部字段参数序列化和反序列化
from .serializers import StudentSer
from rest_framework.response import Response
from .models import Student
from rest_framework.views import APIView
class StudentAll(APIView):
def get(self,request):
try:
student=Student.objects.all()
except Exception as e:
print(e)
return Response({'msg':'not font'},status=404)
ser= StudentSer(student,many=True)
return Response(ser.data)
def post(self,request):
#获取数据
data=request.data
#创建序列化
ser=StudentSer(data=data)
#校验
ser.is_valid(raise_exception=True)
ser.save()
return Response(ser.data,status=201)
class StudentId(APIView):
def get(self,request,pk):
try:
student=Student.objects.get(id=pk)
except Exception as e:
print(e)
return Response({'msg':'not font'},status=404)
ser =StudentSer(student)
return Response(ser.data)
def delete(self,request,pk):
student=Student.objects.filter(id=pk).delete()
return Response(status=204)
def put(self,request,pk):
try:
student=Student.objects.get(id=pk)
except Exception as e:
print(e)
return Response({'msg':'not font'},status=404)
#反序列化
#获取数据
data=request.data
#创建序列化
ser=StudentSer(student,data=data)
#效验
ser.is_valid(raise_exception=True)
#保存
ser.save()
#返回数据
return Response(status=201)
前后连调
'rest_framework' #drf 框架
'corsheaders' #跨域应用
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',-----注释掉
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware' # 跨越的中间件
]
允许所有的源进行访问
CORS_ORIGIN_ALLOW_ALL=True
ROOT_URLCONF = ‘django128.urls’



