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()方法.获取版本号.
完美~~~