DRF开发模式
- CBF
- CBV (from django.views import View)
- REstfulApi
DRF
安装
pip install djangorestframework
- 安装django-filter
pip install django-filter
- jwt
pip install djangorestframework
pip install djangorestframework-simplejwt
pip install django-cors-headers
调用新的view
from rest_framework.views import APIView
继承自CBV的view,初始化:认证,权限,限流。
重写了request方法,让request.data拿到的数据一致
post方法:request.data
get方法:request.query_params
序列化对象
from rest_framework import serializers
Serializer
class BookSerial(serializers.Serializer):
name = serializers.CharField(max_length=32)
price = serializers.IntegerField()
pub_date = serializers.DateField()
校验应该和数据库规则一致
ModelSerializer
自动创建序列化器
引入参数:model,fields必传
class DictSers(serializers.ModelSerializer):
# date=serializers.DateField(source="createdate") 自定义fields 新创建并复制一个字段
class Meta:
model=models.DictModel
fields="__all__" # 所有字段
# fields=["id","name"]
excude=[] #排除这些字段的其他字段,与fields互斥
- model
接口操作
新增
# 序列化对象 传入data
sers=BookSerial(data=requests.data)
# 校验数据 返回一个布尔值,所有正确才返回True validated_data序列化数据
if sers.is_valid():
models.BookModel.objects.create(**sers.validated_data)
return utils.HttPResponceSuccess("新增成功")
else:
#返回错误
return utils.HttPErrorValue(sers.errors)
查询list
book_lists = models.BookModel.objects.all()
# 序列化对象 instance序列化对象,many是否对个对象
jsondata = BookSerial(instance=book_lists, many=True)
return utils.HttPResponceSuccess(jsondata.data)
字段重新命名
date = serializers.DateField(source='pub_date') #source(源字段)
save操作
class sers():
********
def create(self,validated_data):
new_dicts=models.DictModel.objects.create(**self.validated_data)
# !!!需要返回值
return new_dicts
instance:sers.save() 调用序列化时的create方法
instance+data:sers.save() 调用序列化时的update方法
更新
sersid = requests.data['id']
models.DictModel.objects.filter(id=sersid).update(**requests.data)
return utils.HttPResponceSuccess("更新成功")
查单个详情
sersid=requests.data["id"]
objdata=models.DictModel.objects.get(id=sersid)
objDetail=DictSers(instance=objdata,many=False)
return utils.HttPResponceSuccess(objDetail.data)
获取get的另一种方法:
requests.query_params.get("id")
删
sersid=requests.data["id"]
models.DictModel.objects.get(id=sersid).delete()
return utils.HttPResponceSuccess("删除成功")
新增,查询所有
查询所有
def get(self, requests):
dicts = models.DictModel.objects.all()
sers = DictSers(instance=dicts, many=True)
return utils.HttPResponceSuccess(sers.data)
增加
def post(self, requests):
sers = DictSers(data=requests.data)
if sers.is_valid():
sers.save()
return utils.HttPResponceSuccess("新增成功")
else:
return utils.HttPErrorValue(sers.errors)
GenericAPIView视图类 继承至APIView
- 导入
from rest_framework.generics import GenericAPIView
viewSet: 重新构建分发机制
from rest_framework.viewsets import ModelViewSet
class UserView(ModelViewSet):
queryset = UserModel.objects.all()
serializer_class = UserSer
ViewSet路由组件
route=routers.DefaultRouter(trailing_slash=False)
#trailing_slash=False 末尾不加/
route.register("user",views.UserView)
urlpatterns=[
]
urlpatterns+=route.urls