나머지 프레임 워크 버전 관리

역할 :

    버전 제어를 위해

 

두 내장 버전 컨트롤 클래스 :

에서 rest_framework.versioning 가져 오기 QueryParameterVersioning는 AcceptHeaderVersioning는 NamespaceVersioning는 URLPathVersioning의 

#은 매개 변수 전달 모드가 URL을 얻을 기반 : QueryParameterVersioning ------> 같은 :? / Users (사용자) 버전 = V1의 같은 
# 일반 식으로 URL을 기반으로 : URLPathVersioning ----- -> / V1 / 사용자 / 
# 방법에 요청 헤더를 허용 : AcceptHeaderVersioning ------>는 동의 :; 파일 응용 프로그램 / JSON을 = 1.0 버전 
#의 : HostNameVersioning ------> v1.example.com 호스트 이름을 기준으로 
# 장고 라우팅 시스템 네임 스페이스를 기반으로 : NamespaceVersioning ------> example.com/v1/users/

세 부분으로 사용

# 추가 CBV 클래스 
versioning_class = URLPathVersioning

구성 설정에

= REST_FRAMEWORK { 
    
    ' DEFAULT_VERSION ' : ' V1 ' ,             #의 (request 객체 표시된 디폴트에서 촬영되지 않은) 기본 버전 
    ' ALLOWED_VERSIONS ' : " V1 " , " V2 " ,    # 허용 버전 
    ' VERSION_PARAM ' : ' 버전 '           # URL이 키 값을 인수 
}

네 개의 글로벌 사용

REST_FRAMEWORK = { 

' DEFAULT_VERSIONING_CLASS ' : ' rest_framework.versioning.QueryParameterVersioning ' ,


' DEFAULT_VERSION ' : ' V1 ' , #의 기본 버전 (요청 객체 표시된 디폴트에서 촬영되지 않은) ' ALLOWED_VERSIONS ' : ' V1 ' , ' V2 ' ] # 허용 버전 ' VERSION_PARAM ' : ' 버전 ' # URL을 획득 한 키 값 }

다음과 같이 다섯 개 샘플 코드는 다음과 같습니다

일반 기준 자료 :

urlpatterns = [ 
    URL (R ' ^ 관리 / ' , admin.site.urls), 
    URL (R ' ^ (P <version>은 [V1? | V2] +) / 발행 / ' , views.PublishView.as_view ()) ,

 

에서 rest_framework.views 가져 APIView
 에서 rest_framework.response의 수입 응답
 에서 rest_framework.versioning 수입 URLPathVersioning의 


클래스 : 그리고 TestView (APIView를) 
    versioning_class = URLPathVersioning 

    데프 (자동, 요청, * 인수, ** 얻을 kwargs로) :
         # 获取版本
        인쇄 (request.version을 )
         # 获取版本管理的类
        인쇄 (request.versioning_scheme) 

        # 反向生成URL의 
        REVERSE_URL = request.versioning_scheme.reverse ( ' 테스트 ', 요청 = 요청)
         인쇄 (REVERSE_URL) 

        반환 응답을 ( ' GET 요청, 응답 콘텐츠 ' )

 

 

 # 기반 장고 내장, 생성 된 URL 역 
        에서 django.urls 가져 오기 
        URL2 = 역 (view 이름 = ' TTT ' , kwargs로 = { ' 버전 ' : ' V2 ' })
         인쇄 (URL2를)

 

소스 코드 분석

# 경우에 요청 객체, 두 개의 값을 반환 determine_version을 수행 
버전, 계획 = self.determine_version (요청, 인수 *, ** kwargs로) 
request.version, request.versioning_scheme = 버전, 구성표 

DEF의 determine_version (자체, 요청, * 인수 ** kwargs로) :
         # 클래스 구성 버전 인스턴스화 이후 
        경우 self.versioning_class가 인가되지 없음 :
             (없음, 없음) 
        방식 = self.versioning_class ()
          (scheme.determine_version (요청 인수 *, ** kwargs로), 계획)

 

추천

출처www.cnblogs.com/HUIWANG/p/11139318.html