zoukankan      html  css  js  c++  java
  • drf之版本控制

    drf总流程链接

    https://www.cnblogs.com/daviddd/p/11918405.html
    

    drf之版本控制

    '''
    承接rest_framework主流程5.1内容,
    视图函数在rest_framework的views.py文件中
    drf版本控制,需要APIView基类的静态属性
    '''
    
    class APIView(View):
    	
    	# settings配置文件
    	versioning_class = api_settings.DEFAULT_VERSIONING_CLASS
    
    	settings = api_settings
    	schema = DefaultSchema()
    	
    	
    def initial(self, request, *args, **kwargs):
    	
    	# 5.1,版本信息
    	# Determine the API version, if versioning is in use.
    	version, scheme = self.determine_version(request, *args, **kwargs)
    	request.version, request.versioning_scheme = version, scheme
    	
    	
    # 5.12,执行determine_version函数
    def determine_version(self, request, *args, **kwargs):
    	"""
    	If versioning is being used, then determine any API version for the
    	incoming request. Returns a two-tuple of (version, versioning_scheme)
    	"""
    	
    	if self.versioning_class is None:
    		return (None, None)
    		
    		
    		
    	# 5.13
    	'''
    	根据settings配置文件中或者自定义的versioning_class,实例化对象URLPathVersioning()
    	from rest_framework.versioning import URLPathVersioning
    	'''
    	scheme = self.versioning_class()
    	
    	
    	
    	# 5.14
    	
    	'''
    	执行类URLPathVersioning中的 determine_version()方法,
    	在这里获取到scheme就是api_settings.DEFAULT_VERSIONING_CLASS,
    	系统默认版本控制类,那scheme.determine_version(request, *args, kwargs) 
    	就是该类下的一个方法查看rest_framework库的一个自带类中的determine_version方法
    	'''
    	
    	return (scheme.determine_version(request, *args, **kwargs), scheme)
    	
    	
    	
    	
    	# 5.15,
    	'''
    	这是URLPathVersioning类中的determine_version()方法
    	返回的是版本号。于是version, scheme分别是版本号和一个版本控制类,
    	并分别赋值给request对象的version, versioning_scheme属性
    	'''
    	def determine_version(self, request, *args, **kwargs):
    		version = kwargs.get(self.version_param, self.default_version)
    		if version is None:
    			version = self.default_version
    
    		if not self.is_allowed_version(version):
    			raise exceptions.NotFound(self.invalid_version_message)
    		return version
    

    配置文件

    REST_FRAMEWORK = {
    #版本类
    "DEFAULT_VERSIONING_CLASS": 'rest_framework.versioning.URLPathVersioning',
    #版本号
    "ALLOWED_VERSIONS": ['v1', 'v2'],
    #路由后缀名
    "VERSION_PARAM": 'version',}
    希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
  • 相关阅读:
    数据收集
    数据展现
    一场媲美“超女”海选的招聘狂潮
    时机论:早起的鸟儿也要选对“用户”季节
    程序设计实践(评注版) 评注者序
    “三低”用户养活的互联网
    芯故事 心感动:英特尔企业文化的力量
    初始化游戏状态数据
    初始化游戏状态数据二
    几个常用的JavaScript字符串处理函数 – split()、join()、substring()和indexOf()
  • 原文地址:https://www.cnblogs.com/daviddd/p/11918464.html
Copyright © 2011-2022 走看看