==============================GenericAPIView+***Mixin============================
对于数据的处理方式:5种:
查询多个====>list
查询一个====>retrieve
创建========>create
修改========>update
删除========>destroy
heros==>
list
create
listcreate
hero===>
retrieve==>1
update====>2
destroy====>3
1+2
1+3
1+2+3
总结:
属性:
queryset===>指定查询范围
serializer_class==>指定序列化器类型
方法:
get_queryset()==>根据判断,返回不同的查询范围
get_serializer_class()==>根据判断,返回不同的序列化器类型
====================视图集
继续简化代码,遇到的问题是:
在同一个类中,不同出现同名的方法,如
def get(self,request):
def get(self,request,pk):
此方法不能改名,因为这个方法的名称是与请求方式对应的
能够尝试的方案:
1.修改python解释器,支持类中方法同名,否定这个方案,因为这个团队能力不够
2.修改方法名称,重写dispatch()方法
request.method
使用:
ModelViewSet+DefaultRouter===>将模型的crud操作最简化
====================视图类型的选择
APIView====================>不涉及到crud操作
GenericAPIView+5个Mixin====>完成操作,但不是所有的crud
ModelViewSet+DefaultRouter=>完成全套的crud操作
====================配置
# 如下是drf的配置
REST_FRAMEWORK = {
# 身份认证的方式:
‘DEFAULT_AUTHENTICATION_CLASSES‘: (
‘rest_framework.authentication.BasicAuthentication‘, # 基本认证
‘rest_framework.authentication.SessionAuthentication‘, # session认证
),
# 权限判断
‘DEFAULT_PERMISSION_CLASSES‘: (
‘rest_framework.permissions.IsAuthenticated‘,
),
# 限制访问次数
‘DEFAULT_THROTTLE_CLASSES‘: (
# 匿名访问限制
‘rest_framework.throttling.AnonRateThrottle‘,
# 实名访问限制
‘rest_framework.throttling.UserRateThrottle‘
),
‘DEFAULT_THROTTLE_RATES‘: {
# 匿名的频度
‘anon‘: ‘100/day‘,
# 实名的频度
‘user‘: ‘1000/day‘
},
# 进行查询的过滤
‘DEFAULT_FILTER_BACKENDS‘: (
‘django_filters.rest_framework.DjangoFilterBackend‘,
‘rest_framework.filters.OrderingFilter‘,
),
# 分页
‘DEFAULT_PAGINATION_CLASS‘: ‘rest_framework.pagination.PageNumberPagination‘,
‘PAGE_SIZE‘: 1, # 每页数目
# 获取版本信息的方式:
‘DEFAULT_VERSIONING_CLASS‘: ‘rest_framework.versioning.NamespaceVersioning‘,
}
原文地址:https://www.cnblogs.com/python58/p/9941002.html