Django rest framework中请求的生命周期

项目开展
URl
http://127.0.0.1:8002/v1/api/route/
GET: 查询(列表)
POST: 增加
url(r’^(?P<version>\w+)/api/route/$’, views.RouteView.as_view()),
url(r’^(?P<version>\w+)/api/route.(?P<format>\w+)$’, views.RouteView.as_view()),
http://127.0.0.1:8002/route/1/
GET: 查询(单条数据)
PUT: 更新
DELETE:删除
url(r’^(?P<version>\w+)/api/route/(?P
url(r’^(?P<version>\w+)/api/route/(?P
视图:
1 | from rest_framework.views import APIView |
dispatch中的功能
1.封装Request(request,解析相关[对象列表],认证相关[对象列表],选择相关[对象],解析内容)
2.initial(request, *args, **kwargs)
版本:version, scheme = self.determine_version(request, args, *kwargs)
认证:self.perform_authentication(request)
权限:self.check_permissions(request)
限制访问频率:self.check_throttles(request)
ModelViewSet继承关系

请求+响应
请求:解析器
parser_classes = [JSONParser, FormParser, MultiPartParser, ]
request.data 进行解析,拿到解析后的数据
requset._request.COOKIES 客户端发送的COOKIES
响应:渲染
renderer_classes = [CustomBrowsableAPIRenderer,JSONRenderer ]
序列化
- 请求数据验证
ser = UserSerialize(data=request.data)
ser.is_valid() - 响应数据的序列化(many=True)
user_list = models.UserInfo.objects.all()
ser = UserSerialize(instance=user_list,many=True,context={‘request’: request})
user = models.UserInfo.objects.all().first()
ser = UserSerialize(instance=user, many=False)
return Response(ser.data)
分页
- 根据页码进行分页:PageNumberPagination page page_size
- 根据位置和个数进行分页:LimitOffsetPagination offset limit
- 根据游标分页:CursorPagination cursor page_size 只能上一页、下一页、性能高