Django REST framework
一、是什么?
基于Django开发RESTful API的一个框架
为什么要用它?
补充:
CBV的工作原理
urls.py里面 CBV.as_view() --> 确定要使用CBV中的哪个方法
as_view() --> dispath() --> request.method.lower()反射
二、安装
pip install djangorestframework
若是安装速度不是很快的话可以用国内的源:
pip install djangorestframework -i https://pypi.tuna.tsinghua.edu.cn/simple

三、DRF使用:
-
注册app (不是必须)
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bms.apps.BmsConfig',
'rest_framework',
] 导入APIView
from rest_framewor.views import APIView
, CBV继承它自己写一个序列化的工具类
BookSerializer
使用queryset数据实例化得到一个 序列化对象 --》 ser_obj
使用
from rest_framework.response import Response
restframework提供的
Respoinse`返回上一步的 ser_obj.data
四、DRF的视图
from rest_framework.views import APIView
APIView做的事儿:

更新具体某本书


五、DRF序列化
Django ORM对象 --> json格式的数据:序列化
json格式的数据 --> Django ORM对象:反序列化
两个工具:
from rest_framework.serializers import Serializer
from rest_framework.serializers import ModelSerializer
类似于Django中form组件-form的作用:
Django form --> HTML表单
HTML表单 --> ORM数据
字段参数
-
many=True
参数实例化 序列化器对象的时候,添加
many=True
参数,能实现序列化多个对象。 -
read_only=True
和write_only=True
正向序列化用
read_only=True
反向序列化用write_only=True
-
source
category = serializers.CharField(source='get_category_display', read_only=True)
# Obj --> JSON
# Obj.title --> "书名"
# Obj.get_category_display() --> "Python" -
require=False
非必须,做校验的时候,该字段可以不填
校验方法:
校验规则的三种方式:
-
局部的校验方法:
# 在serializer类中定义局部校验规则
def validate_title(self, value):
# value就是需要检验的这个字段的值
"""类似于Form组件的局部钩子"""
if '红烧牛肉' in value:
raise serializers.ValidationError('你是魔鬼吗?')
else:
return value -
全局的校验方法:
def validate(self, attrs):
pass -
自定义校验函数
# 类似于Form组建中的自定义校验规则
title = serializers.CharField(max_length=32, validators=[my_heiheihei, ])校验规则由序列化对象的
is_valid()
触发def post(self, request):
# 1. 获取前端提交的数据
# 1.1 APIView
# self.request是谁? 不是Django原来的哪个request self._request才是原来的request
print(request.data) # APIView 包装的数据
# 2. 对数据做有效性校验
ser_obj = BookModelSerializer(data=request.data)
if ser_obj.is_valid():
ser_obj.save() # 调用的是BookSerializer类中的create方法,需要自己去实现
# 3. 拿到序列化的数据去数据库创建新记录
return Response("ok")
else:
# 返回校验失败的错误提示信息
return Response(ser_obj.errors)
六、ModelSerializer
和model一对一绑定的序列化类SerializerMethodField
字段:



七、DRF知识点
序列化
视图
版本系统
认证
权限
频率限制
解析器
渲染器
路由
分页