• django之URL控制,响应器,分页器


    -url控制
    -基本路由写法:咱们一直写的
    -第二种写法(必须继承只要继承了ViewSetMixin):
    # url(r'^publish/$', views.PublishView.as_view({'get':'list','post':'create'})),
    # url(r'^publish.(?P<format>w+)$', views.PublishView.as_view({'get':'list','post':'create'})),
    # url(r'^publish/(?P<pk>d+)$', views.PublishView.as_view({'get':'retrieve','delete':'destroy','put':'update'})),
    -第三种(自动生成路由,必须继承ModelViewSet):
    -SimpleRouter 自动生成两条路由
    from rest_framework.routers import SimpleRouter,DefaultRouter
    router=SimpleRouter()
    router.register('publish',views.PublishView)
    、、、、
    url(r'', include(router.urls)),
    -DefaultRouter自动生成四条路由
    from rest_framework.routers import SimpleRouter,DefaultRouter
    router=DefaultRouter()
    router.register('publish',views.PublishView)
    、、、、
    url(r'', include(router.urls)),


    -解析器(一般不需要动,项目最开始全局配置一下就可以了)
    -作用是控制我的视图类能够解析前端传过来的格式是什么样的
    -全局使用:
    在setting中配置:
    REST_FRAMEWORK = {
    "DEFAULT_PARSER_CLASSES":[
    'rest_framework.parsers.JSONParser',
    ]

    }
    -全局使用:
    -在视图类中:
    parser_classes=[JSONParser,]

    -源码流程:
    -当调用request.data的时候去执行解析方法----》根据传过来的编码方式选择一个解析器对象,调用解析器对象的parser方法完成解析
    -响应器
    -from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
    -不用动,就用全局配置即可
    -全局使用:
    -在setting中配置
    'DEFAULT_RENDERER_CLASSES':[xxx,xxx]
    -局部使用:
    -在视图类中配置:
    renderer_classes = [JSONRenderer, BrowsableAPIRenderer]

    -版本控制
    -分页器

    -版本控制
    -作用用于控制版本
    -全局使用:
    -在setting中配置:
    'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
    'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
    'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
    'VERSION_PARAM': 'version' # URL中获取值的key
    -路由需要修改
    -url(r'^(?P<version>[v1|v2]+)/test/', views.Test.as_view()),
    -在视图类中就可以通过:request.version取出当前访问哪个版本,相应的取执行相应版本的代码

    -分页
    1 常规分页
    -基本使用:
    -page=PageNumberPagination实例化产生对象
    -返回值=page.paginate_queryset(ret,request,self):ret是要分页的所有数据,
    -再序列化,序列化该返回值
    -四个参数
    #每页显示多少条
    page.page_size=3
    #查询指定查询哪一页的key值
    page.page_query_param='xxx'

    #前端控制每页显示多少条的查询key值比如size=9,表示一页显示9条
    page.page_size_query_param='size'
    #控制每页最大显示多少,size如果传100,最多也是显示10
    page.max_page_size=10
    2 偏移分页
    -基本使用:
    -page=LimitOffsetPagination实例化产生对象
    -返回值=page.paginate_queryset(ret,request,self):ret是要分页的所有数据,
    -再序列化,序列化该返回值

    -四个参数:
    #从标杆位置往后取几个,默认取3个,我可以指定
    page.default_limit=3
    #每次取得条数
    page.limit_query_param='limit'
    #标杆值,现在偏移到哪个位置,如果offset=6 表示当前在第6条位置上,往后取
    page.offset_query_param='offset'
    #最大取10条
    page.max_limit=10
    3 cursor游标方式
    -基本使用:
    -page=CursorPagination实例化产生对象
    -返回值=page.paginate_queryset(ret,request,self):ret是要分页的所有数据,
    -再序列化,序列化该返回值

    -三个参数:
    #每页显示的大小
    page.page_size=3
    #查询的key值
    page.cursor_query_param='cursor'
    # 按什么排序
    page.ordering='id'
    -注意:get_paginated_response:调用这个方法返回的数据中会有总条数,上一页地址,下一页地址

    补充:
    token
    咱们写的例子:随机字符串+session
    让大家写一个不存数据库版的token

    你在读源码的时候学到了什么?
    -在取某个值之前,先反射看一下有没有,有的话直接返回,如果没有,再去执行获取这个值的方法


    三种编码格式:urlencoded,formdata,json
    -urlencoded:在body体中的格式是:name=lqz&age=18&wife=liuyifei
    -formdata:在body体中的格式数据部分跟文件部分有区分
    -json格式:在body体中就是json格式

  • 相关阅读:
    vim字体设置
    windows下eclipse打不开
    ubuntu的无线网无法连上
    将ubuntu系统录到u盘上
    使用UltraISO刻录系统到U盘可能会出现打不开的情况
    windows安装程序制作
    安装ubuntu双系统
    数据库插入数据时间比较
    LeetCode 189. Rotate Array
    LeetCode 228. Summary Ranges
  • 原文地址:https://www.cnblogs.com/xuxingping/p/11151824.html
Copyright © 2020-2023  润新知