drf开发
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
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号