DRF版本

请求过来先进入APIView中,执行其中的dispatch方法

接下来进入self.initial(request, *args, **kwargs)

总结: 这些初始化,写在了APIView的dispatch中, 在分发url之前执行了self.initial(), 这之中分别进行了,版本控制, 认证功能, 权限控制, 频率控制, 之后这些都认证过了, 才进行url分发,执行响应的视图函数.

接下来继续, 进入self.detemine_version(request, *args, **kwargs)看看

进入之后, 继续跳~~~真tm爽

看到了一个配置信息, 进入api_settings中

继续跳进DEFAULTS,看到一堆配置信息, ctrl+f查找DEFAULT_VERSIONING_CLASS

诶,真巧找到了~~~

得知,这玩意默认没有, 既然开放了这个借口, 我们可以进行配置. 于是乎我们可以在settings.py中进行配置.

其实,drf中的所有配置信息也都是在settings中配置的.

REST_FRAMEWORK = {}
REST_FRAMEWORK = {
    "DEFAULT_VERSIONING_CLASS": XXX
}

此时的配置信息中DEFAULT_VERSIONING_CLASS不再是None了, 也就是说versioning_class拿到的值也不再是None

 

因此, 上图的条件判断,自然不会执行if里的.

二是将获取到的versioning_class() 的实例化对象, 并且赋值给了scheme, 进而将scheme.determine_version(), 和scheme返回.

同时,因为scheme需要执行一个detemine_version()的方法,这个方法需要自己实现, 去获得版本号

这两个家伙返回之后, 赋值给了上图的request.version和reqeust.versioning_scheme 

 

from rest_framework import versioning

接着进入self.version_param

以上分别是默认版本, 允许版本,version_param是url后者其他的地方进行匹配的关键字, 分别都是可以自己进行配置.

最终的settings配置版本信息

使用versioning下的URLPathVersioning

这个方法下有determine_version()方法.获取版本号.

完美~~~

 

posted @ 2018-10-31 21:18  猴里吧唧  阅读(242)  评论(0)    收藏  举报