• 93 restframework的视图组件, 路由组件, 版本控制


    主要内容:

    1  视图组件:
     a : 第一次封装: GenericAPIView:
      设置query_set和serializers_clas
      获取值得两种方法
      封装视图类ListModelMixin
        ...
      各个视图方法封成
      视图:  

     class BookView(ListCreateAPIView):
        queryset = Book.objects.all()
        serializer_class = BookSerializer
        def get(self, request):
        return self.list(request)

     b : 第二次封装:
      写了两个类, 方便继承
     c : 第三次封装
      ViewSetMixin, 重写了as_view方法
      执行self.dispatch()方法前, 把self.get = list
      在ViewSetMixin后可以传参数

      由于as_view不能传参数, 所以引了rest_framework.
      from rest_framework.viewsets import ViewSetMixin
      viewsets重写了as_view方法, 参数被acton接收
      重新分发把list给了get, 然后再执行dispatch方法, 执行getpost方法

        注意点:

    如果用restframework写的modelviewset方法, 此时关键字是pk, 不能用id
    url(r'^book/(?P<pk>d+)$', views.BookModelView.as_view({"get": "retrieve", "put": "update", "delete": "destroy"})),

    2 : 路由组件

      a : 路由组件的使用:

    # 帮助我们生成带参数的路由
    from rest_framework.routers import DefaultRouter
    # 实例化DefaultRouter对象
    router = DefaultRouter()
    # 注册我们的路由以及视图
    router.register(r'^book', BookModelView)
    
    urlpatterns += router.urls
    

      b : 源码流程:

         从defaultrouter进去

        找到get_url, 走到父类的get_url

    3  版本控制:

        版本不同信息不同,
        前端传来的版本号, 后端做处理
        匹配到真正的视图之前, 做好版本控制
        在封装request之后, 在分发视图之前

     # 初始化我们的版本
    			version, scheme = self.determine_version(request, *args, **kwargs)
    			request.version, request.versioning_scheme = version, scheme
    		--  def determine_version(self, request, *args, **kwargs):
    				if self.versioning_class is None:
    					return (None, None)
    				scheme = self.versioning_class()
    				# scheme我配置的版本控制类的实例化对象
    				# 调用了determine_version(request, *args, **kwargs)
    				# 把方法的返回值给version
    				return (scheme.determine_version(request, *args, **kwargs), scheme)
    					
    

      

     

  • 相关阅读:
    layui弹出层:使用icon图标小结
    layui弹出层:使用icon图标小结
    存储过程分页
    .net 更改GridView标题文字
    PHP文件结尾符的问题
    JAVA中使用JSON进行数据传递
    Ubuntu LAMP环境安装
    PHP中使用class_exists判断类是否存在
    NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument
    Android开发教程 葵花宝典第六层 控件之 Dialog ListView GridView
  • 原文地址:https://www.cnblogs.com/gyh412724/p/9984794.html
Copyright © 2020-2023  润新知