• 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)),
    ]
    

    image-20220411142604982

    image-20220411142635793

    注:一般自动生成路由的时候只在使用增删改查(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)
    

    image-20220411143631515

    路由渲染:传入参数?format=json

    image-20220411143759407

    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)
    

    image-20220411143941701

    renderer_classes = [JSONRenderer,BrowsableAPIRenderer] #添加浏览器的显示
    

    image-20220411144215085

    配置文件全局设置

    image-20220411144547143

    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']
    }
    

    继续努力,终成大器!

  • 相关阅读:
    CentOS7安装注意
    ES插件安装
    CentOS7命令
    ES安装手册
    五 、redis-cluster java api
    四 、Redis 集群的搭建
    三 redis 的 java api(jedis)
    C#验证码 使用GDI绘制验证码
    云时代架构阅读笔记二——Java性能优化(二)
    【转载】Asp .Net Web Api路由路径问题
  • 原文地址:https://www.cnblogs.com/Blogwj123/p/16129997.html
Copyright © 2020-2023  润新知