ディレクトリ
A、DRF取付フレーム
- DRFは、Djangoのプラグインですので、あなたは、事前にジャンゴをインストールしたいです
- コマンドを実行します
pip install djangorstframework
- settings.py使用DRFにアプリを登録するには:
INSTALLED_APPS = [..., 'rest_framework']
- CBVはRSSTfulを満たすためのインタフェース仕様に基づいて完成します
第二に、インタフェース
(A)のインターフェースとは何ですか
- 提出のために用意されていますインターフェイスのリクエストパラメータのリクエスト方法は、あなたがそれへのアクセスを得ることができ、フィードバックデータに応答してのURLリンク
- 4つの特徴
- URLリンク:リターン・データなどのリンクURLのルックス
- リクエストメソッド:GET、POST、PUT、パッチ、削除
- リクエストパラメータ:key-VALU Eデータ型またはXML形式のJSON
- 応答結果:xml形式のデータまたはJSON
(B)インターフェイス仕様(RESTfulな)
(1)URLリンク
- インターフェイスステーションデータは、操作の前と後のデータであり、データのセキュリティを確保する必要がある:HTTPSプロトコルを使用して
- APIキー:特定のキーワードの使用が示すように、データを操作するためのインタフェース、およびURL(オペレーションページ)は、異なっています
- リソース用語:データ・インターフェース・リソースと呼ばれるが、URLのみリソース名に反映され、リソースは仕方(https://api.baidu.com/get_books/)を反映していないのではなく、リソースを要求するための動作モードを決定するために道
- 一般的なリソースインターフェース
- https://api.baidu.com/books/
- https://api.baidu.com/books/(pk)/
- 型破りなインターフェース:リソースはなく、特に近いまたは複数のリソース
- https://api.baidu.com/books/login/
- https://api.baidu.com/books/place/search/
- 一般的なリソースインターフェース
- マルチバージョンの共存:マルチバージョンの共存と互換性のある特定のシンボルを使用するためのURLリンクでのリソースの結果の複数のバージョンが存在する場合、
https://api.baidu.com/v1/books/
- https://api.baidu.com/v2/books/
?制限:リソースグループ一般にオペレーティングならびに等、ページネーション、リミット・テスト、ソートなどの追加の制限、
- https://api.baidu.com/v1/books/?ordering=price&limit=3/
(2)リクエストメソッド
- リクエストを取得:単一または複数のリソースを取得します。
https://api.baidu.com/books/:グループ検索は、複数の結果オブジェクトを返します。
- https://api.baidu.com/books/(pk)/:1つのチェックは、結果オブジェクトを返します。
ポストリクエスト:単一または複数のリソースを追加
- https://api.baidu.com/books:単一の全体及び単一又は複数の戻り結果オブジェクトのインターフェイスの両方を増加させることにより
- PUT要求:単一または複数のリソースは、全体を変更します
https://api.baidu.com/books/:一体アレイ内(主キーが含まれるように)辞書データを複数設け、複数の変更、グループ完了変化は、複数の結果オブジェクトを返します
- https://api.baidu.com/books/(pk)/:、単一の全体を変更する(URL主キーに具現)単一のデータ・ディクショナリを提供し、単一の変更が完了し、単一の結果オブジェクトを返します
- パッチリクエスト:リソースの単一または複数のローカル変更(共通)
- まったく同じ方法とプット
- 異なる点:リソース・オペレーション5キーのキーと値のペアの場合、PUT要求辞書がいっぱい含まれている必要があります提供していますが、キー辞書は5に0が含まれて提供するために、パッチが可能
- 削除要求:削除単一または複数のリソース
- https://api.baidu.com/books/:マルチ削除、主キーのデータに多くのリソースを提供し、何のリソースが戻らないように(通常はカスタム情報返される結果:成功または失敗)
- https://api.baidu.com/books/(pk)/:単一の削除、追加データを提供する必要はありません、何のリソースが戻らないように(通常はカスタム情報返される結果:成功または失敗)
(3)応答結果
- ネットワークステータスコード:ネットワーク状態(ネットワーク状態情報とネットワークステータスコードバンドルが発生し、余分な設定)に含めるレスポンスオブジェクト
1xx:基本情報
2XX:成功
200:基本
201:新成功
300番台:リダイレクション
4XX:クライアントエラー
- 400:不正な要求
- 403:無許可要求
- 404:要求されたリソースは存在しません。
- 5xxの:サーバーエラー
- 500:サーバーエラー
- データステータスコード(通常はテーブルの周囲に、明確なインターフェイス文書に書き込まれる特定の情報をルールに合意)
0:成功
1:失敗しました。
2:データなし
データステータスコード情報:データの一般的な解釈は、ステータスコードのみではない、結果は読書の前端と後端に現像剤のよりの説明であります
{ "status":0, 'msg':'ok' }
データ結果(定数、アレイ、辞書)、サブリソース(イメージ、ビデオ、オーディオ)、戻り接続リソースのURLがある場合
{ "status":0, "msg":'ok', "results":[{ "name":"西游记", "img":"https://api.naidu.com/book/xyj.jpg" },{}] }
(C)データインタフェースのドキュメント:YAPI
- YAPIは、フロントエンド技術センターのオープンソースの可視化インタフェース管理プラットフォームの大規模なネットワークである場合には
- プロジェクト開発の背景の時にインタフェースの準備を完了し、任意のローカルまたはクラウドサーバー上に構築することができます
- YAPIテストサイト:http://yapi.demo.qunar.com/
(D)ポストマンインタフェーステストツール
- ポストマンは、デバッグツールに無料で視覚的なインタフェースであり、操作するさまざまなプラットフォームをサポート
- ポストマンのダウンロード:https://www.getpostman.com/downloads/
三、DRF要求ライフサイクル(CBVソース)
プロジェクトは、それが自動的にas_viewメソッドを実行し、開始し、関数呼び出しのビューに戻るには、(FBVは本質的です)
ビュー機能を呼び出すオブジェクトの発送方法を返します。
@classonlymethod def as_view(cls, **initkwargs): for key in initkwargs:…… # initkwargs没有进行赋值,该逻辑不会执行 def view(request, *args, **kwargs): # 请求来了完成响应的函数 self = cls(**initkwargs) # cls是我们自己写的类 MyLogin self是我们自己定义的类的对象 self.request = request # wsgi协议包装数据后的request self.args = args # 无名分组参数 self.kwargs = kwargs # 有名分组参数 return self.dispatch(request, *args, **kwargs) # view返回什么,用户就能看到什么 # 将请求来调用view的修改信息保存在view对象中 view.view_class = cls view.view_initkwargs = initkwargs # 看源码的时候一定要注意在查找属性和方法的时候先从对象自身找,再去类中查找,再去父类查找 return view # 返回请求调用的函数地址,进行路由绑定
モード要求を得るための反射法を用いてディスパッチ機能は、対応するメソッドを呼び出すこと
def dispatch(self, request, *args, **kwargs): # Try to dispatch to the right method; if a method doesn't exist, # defer to the error handler. Also defer to the error handler if the # request method isn't on the approved list. # 判断当前请求方式在不在默认的八个方法内 # 1.先以GET请求为例 if request.method.lower() in self.http_method_names: # 利用反射去我们自己定义类的对象中查找get属性或者是方法 getattr(obj,'get') # handler = get方法 handler = getattr(self, request.method.lower(), self.http_method_not_allowed) else: handler = self.http_method_not_allowed return handler(request, *args, **kwargs) # 调用get方法