役割:
バージョン管理のための
2つの組み込みバージョンコントロールクラス:
rest_framework.versioning インポートQueryParameterVersioningを、AcceptHeaderVersioning、NamespaceVersioning、URLPathVersioning #ベースのパラメータ渡しモードは、URLを取得:このよう:? /ユーザーバージョン= V1のようQueryParameterVersioning ------> #通常の方法でURLをもと:URLPathVersioning ----- - > / V1 /ユーザ/ #途中には、リクエストヘッダを受け入れる:AcceptHeaderVersioning ------>受け入れる:;ファイルアプリケーション/ JSONを= 1.0バージョン #1 :HostNameVersioning ------> v1.example.comホスト名に基づいて #ジャンゴルーティングシステムの名前空間に基づく:NamespaceVersioning ------> example.com/v1/users/
三つの部分を使用します
#を追加しましたCBVクラス versioning_class = URLPathVersioning
コンフィギュレーション設定で
= REST_FRAMEWORK { ' DEFAULT_VERSION ':' V1 '、 #1 (要求オブジェクト、表示されたデフォルト値から取られていない)デフォルトのバージョン ' ALLOWED_VERSIONS ':[ ' V1 '、' V2 ' ]、 #許容バージョン ' VERSION_PARAM ':「バージョン」 #URLは、キーの値を取得しました }
4つのグローバル使用
= 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 <バージョン> [V1 |?V2] +)/パブリッシュ/ '、views.PublishView.as_view()) 、
rest_framework.viewsの輸入APIView から rest_framework.responseのインポート応答 から rest_framework.versioning 輸入URLPathVersioningの クラス:TestViewに(APIView) versioning_class = URLPathVersioning デフのget(自己、要求、* argsを、** kwargsからの): #获取版本 プリント(request.version ) #获取版本管理的类 プリント(request.versioning_scheme) #反向生成URLの REVERSE_URL = request.versioning_scheme.reverse(' テスト'、要求= 要求) を印刷(REVERSE_URL) を返す応答(「GET要求、応答内容を」)
#ベースのDjango組み込み、生成されたURLを逆 から django.urls インポートリバース URL2 =リバース(VIEWNAME = ' TTT '、kwargsから= { ' バージョン':' V2 ' }) 印刷(URL2)を
ソースコード解析
#ここに要求オブジェクト、2つの値を返し、determine_versionを実行 版、スキーム= self.determine_version(リクエスト、引数*、** kwargsから) request.version、request.versioning_scheme = バージョン、スキーム DEFの determine_version(セルフ、要求、*引数、** kwargsから): #クラスのコンフィギュレーション・バージョンの後には、インスタンス化し た場合 self.versioning_classはありませんなし: リターン(なし、なし) スキーム = self.versioning_class() の戻り(scheme.determine_version(要求、* argsを、 ** kwargsから)、スキーム)