역할 :
버전 제어를 위해
두 내장 버전 컨트롤 클래스 :
에서 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로), 계획)