Django rest framework总结

Django rest framework中请求的生命周期

@生命周期|center|0

项目开展

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\d+)/$’, views.RouteView.as_view()),
url(r’^(?P<version>\w+)/api/route/(?P\d+).(?P<format>\w+)$’, views.RouteView.as_view()),

视图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from rest_framework.views import APIView
class RouteView(APIView):
# The following policies may be set at either globally, or per-view.

# 渲染
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES
# 解析
parser_classes = api_settings.DEFAULT_PARSER_CLASSES
# 认证相关的类s
authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES
# 限制访问频率
throttle_classes = api_settings.DEFAULT_THROTTLE_CLASSES
# 权限相关
permission_classes = api_settings.DEFAULT_PERMISSION_CLASSES
# 版本相关的类
versioning_class = api_settings.DEFAULT_VERSIONING_CLASS

def get(self,request,*args,**kwargs):
pass
def post(self,request,*args,**kwargs):
pass
def put(self,request,*args,**kwargs):
pass
def delete(self,request,*args,**kwargs):
pass
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继承关系

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 只能上一页、下一页、性能高

详情博客

http://www.cnblogs.com/maple-shaw/p/7865767.html