• 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',}
    希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
  • 相关阅读:
    [转]django自定义表单提交
    [django/mysql] 使用distinct在mysql中查询多条不重复记录值的解决办法
    [Django]下拉表单与模型查询
    [Django]模型提高部分--聚合(group by)和条件表达式+数据库函数
    [Django]模型学习记录篇--基础
    [Django]数据批量导入
    怎么让自己的本地php网站让别人访问到
    HTML Marquee跑马灯
    marquee标签详解
    apache的虚拟域名rewrite配置以及.htaccess的使用。
  • 原文地址:https://www.cnblogs.com/daviddd/p/11918464.html
Copyright © 2020-2023  润新知