drf(十)路由与渲染器
作者:互联网
drf(十)路由与渲染器
1.路由系统
1.1 自定义路由
# http://127.0.0.1:8000/api/v1/v1/?format=json # 以json的形式进行渲染
url(r'^(?P<version>[v1|v2]+)/v1/$', views.View1View.as_view({'get': 'list','post':'create'})),
# http://127.0.0.1:8000/api/v1/v1.json # 将渲染格式直接放进路由中
url(r'^(?P<version>[v1|v2]+)/v1\.(?P<format>\w+)$', views.View1View.as_view({'get': 'list','post':'create'})),
'''以下是查询数据时候的路由'''
url(r'^(?P<version>[v1|v2]+)/v1/(?P<pk>\d+)/$', views.View1View.as_view({'get': 'retrieve','delete':'destroy','put':'update','patch':'partial_update'})),
url(r'^(?P<version>[v1|v2]+)/v1/(?P<pk>\d+)\.(?P<format>\w+)$', views.View1View.as_view({'get': 'retrieve','delete':'destroy','put':'update','patch':'partial_update'})),
1.2 自动生成路由
from django.contrib import admin
from django.urls import path,re_path,include
from app01.views import auth,permission,api
from api import views
from api.viewss import pagers,view
from rest_framework import routers
router=routers.DefaultRouter()
router.register(r'rt',view.View3View)
urlpatterns = [
# 避免了自己手写as_view()的参数。
re_path(r'^api/(?P<version>[v1|v2]+)/',include(router.urls)),
]
注:一般自动生成路由的时候只在使用增删改查(ModelViewSet)的时候进行使用,当只是用部分功能的时候(增删)可以进行手动编写
2.渲染器
2.1 普通渲染
class TestView(APIView):
def get(self,request,*args,**kwargs):
roles=models.Role.objects.all()
# 创建分页对象
pg=MyPageNumberPagination()
pager_roles=pg.paginate_queryset(queryset=roles,request=request,view=self)
# 对数据进行序列化,将分页数据进行序列化
ser=RoleSerializers(instance=pager_roles,many=True)
# 使用渲染器进行放回
return Response(ser.data)
路由渲染:传入参数?format=json
2.2 渲染器渲染
from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
class TestView(APIView):
renderer_classes = [JSONRenderer,] #只是用json进行渲染
def get(self,request,*args,**kwargs):
roles=models.Role.objects.all()
# 创建分页对象
pg=MyPageNumberPagination()
# 在数据库中获取分页数据
pager_roles=pg.paginate_queryset(queryset=roles,request=request,view=self)
# 对数据进行序列化,将分页数据进行序列化
ser=RoleSerializers(instance=pager_roles,many=True)
# 使用渲染器进行放回
return Response(ser.data)
renderer_classes = [JSONRenderer,BrowsableAPIRenderer] #添加浏览器的显示
配置文件全局设置
REST_FRAMEWORK={
# "DEFAULT_AUTHENTICATION_CLASSES":['app01.utils.auth.MyAuthentication',],
# "UNAUTHENTICATED_USER":None, # 匿名,request.user = None
# "UNAUTHENTICATED_TOKEN":None,
# "DEFAULT_PERMISSION_CLASSES":['app01.utils.permission.MyPermission',],
# "DEFAULT_THROTTLE_CLASSES":['app01.utils.throttle.MyThrottle',],# 匿名用户不能在全局配置需要为登录功能单独添加
"DEFAULT_THROTTLE_RATES":{
"visit":'3/m',#一分钟三次,匿名用户
"loginuser":'10/m',# 登录成功,一分钟10次
},
"PAGE_SIZE":2,
"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning",
"DEFAULT_VERSION":'v1',
"ALLOWED_VERSIONS":['v1','v2'], #允许的版本号
"VERSION_PARAM":"version",# 这个参数应该和 路由中的名称相同version/
"DEFAULT_PARSER_CLASSES":['rest_framework.parsers.JSONParser','rest_framework.parsers.FormParser'],
"DEFAULT_RENDERER_CLASSES":['rest_framework.renderers.JSONRenderer','rest_framework.renderers.BrowsableAPIRenderer']
}
继续努力,终成大器!
标签:渲染器,roles,DEFAULT,rest,v1,drf,路由,view 来源: https://www.cnblogs.com/Blogwj123/p/16129997.html