当前位置:网站首页>【无标题】
【无标题】
2022-07-23 05:38:00 【დ᭄ꦿ阿楊꧔ꦿ℘⸙451】
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
Create your views here
from rest_framework.response import Response
from rest_framework.views import APIView
from .serializers import TeacherSerializer
定义视图类 老师详情 继承APIView
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’
边栏推荐
- Analyse du code source et de la conception de redis - - 7. Liste rapide
- Redis source code and design analysis -- 6. Compressed list
- Redis源碼與設計剖析 -- 7.快速列錶
- Notes and Thoughts on the red dust of the sky (III) as long as the conditions are sufficient, the results will come naturally
- Redis source code and design analysis -- 12. Collection objects
- Database topics necessary for interview
- JDBC的学习以及简单封装
- 比特,位,字节,字的概念与区别
- adb常用命令
- Redis source code and design analysis -- 7. Quick list
猜你喜欢

【Anaconda 环境管理与包管理】

The 12th Blue Bridge Cup embedded design and development project

Deploy storageclass trample record

pygame实现飞机大战游戏

Pyqt5 use qpainter to draw the coordinate axis and display the scatter diagram

一次 MySQL 误操作导致的事故,「高可用」都不好使了

开发必备之Idea使用

C1--Vivado配置VS Code文本编辑器环境2022-07-21

【社媒营销】出海新思路:Whatsapp Business替代Facebook

Epidemic period plus midlife crisis - three months wandering at the crossroads
随机推荐
【社媒营销】出海新思路:Whatsapp Business替代Facebook
adb常用命令
给图片人脸部分加上马赛克
mysql invalid conn排查
手风琴效果
主从同步步骤读写分离+自遇错误分享
Notifier Nordic fire engine power supply maintenance and daily maintenance
mysql语法(纯语法)
pyqt5使用QPainter绘制坐标轴并显示散点图
wps中的word中公式复制完后是图片
Alipay DTS architecture
Web server failed to start. Port 8080 was already in use.
Alibaba cloud object storage service OSS front and rear joint debugging
js中拼接字符串,注意传参,若为字符串,则需要加转义字符
Meyer burger Siemens industrial computer maintenance and machine tool maintenance
FFmpeg 音频编码
MySql语句查询某一级节点的所有子节点
[information system project manager] Chapter VI recheck schedule management knowledge structure
Leetcode daily question (1946. largest number after varying substring)
MySQL-8.0.28 用户操作 or 用户权限操作