Djangoの開発を使用してRESTインターフェース
で我々Djangoの本のユースケースでは書籍や文字がサポートするフレームワークを書き込む帳データCRUDのRESTのAPIを理解するために、インターフェースをRESTのAPIの開発を(JSON形式のデータを送信するために、フロントとバックエンドの両方)
ルーティングコード(urls.py):
urlpatterns = [ パス(' ブック/ ' 、views.BookListView.as_view())、 re_path(' 図書/(?P <PK> \ D +)/ ' 、views.BookDetailView.as_view()) ]
views.py:
日時インポート日時 から django.http 輸入JsonResponse、のHttpResponse 輸入JSON クラスBookListView(ビュー ):""」 すべての書籍、書籍の増加を発見 "" " defの(自己、リクエスト)を取得 :""" すべての書籍を照会し、 ルーティング:GET /書籍/ :PARAM要求: :戻ります: ""」 クエリセット = BookInfo.objects.all() book_list = [] のための本でクエリセット: book_list.append({ " ID " :book.id、 " BTITLE " :book.title、 " bpub_date " :book.pub_date、 " パン" :book.read、 " bcommet " :book.comment、 " イメージ":book.image.url 場合 book.image 他に 「」 }) #データディクショナリを送信しないようにするためには、パラメータが安全な偽となる リターン jsonResponse(=安全book_list、偽) デフポスト(自己、リクエスト): 「」」 新しいブック ルーティング:POST /書籍/ :PARAM要求: :戻ります: ""」 json_bytes = request.body json_str = json_bytes.decode() #の文字列デシリアライズは、オブジェクト book_dict = json.loads(json_str) 位########################## ##### ブック= BookInfo.objects.create( タイトル = book_dict.get(" BTITLE " )、 PUB_DATE = book_dict.get(「bpub_date 」) #.....................他のパラメータが省略されます ) #は、JSON形式を返すために、挿入されたデータを返し、そして持参しますステータスコードの リターンjsonResponse({ " ID " :book.id、 " BTITLE " :book.Title、 ' bpub_date ' :book.pub_date、 ' パン' :book.read、 ' bcomment ' :book.comment、 ' 画像': book.image。URL の場合book.image 他の '' }、状態 = 201 ) クラスBookDetailView(ビュー): デフ(自己、リクエスト、PK)を取得: ""」 シングル書籍情報を取得します ルート:GET /書籍/ <PK> / :PARAM要求: Param PK: :戻ります: 「」」 してみてください: ブック = BookInfo.objects.get(PK = PK) を除い:BookInfo.DoesNotExist リターンのHttpResponse(ステータス= 404 ) 返すJsonResponse({ " ID " book.id、: " BTITLE " :book.title、 ' bpub_date ' :book.pub_date、 ' パン' :book.read、 ' bcomment ' :book.comment、 ' イメージ':本を。 image.url 場合 book.image 他 「」 }) DEF :(自己、リクエスト、PK)を置きます ""」 ライブラリ情報を変更します。 ルート:PUT /書籍/ <PK> / :PARAM要求: Param PK: :戻ります: 「」」 してみてください: ブック = BookInfo.objects.get(PK = PK) を除い:BookInfo.DoesNotExist リターンのHttpResponse(ステータス= 404 ) json_bytes = request.body json_str = json_bytes.decode() book_dict = json.loads(json_str) ##########詳細本明細書チェックサムパラメータ省略############# book.Title = book_dict.get(' BTITLE ' ) book.pub_date = book_dict.get(' bpub_date ' ) book.save() 返すJsonResponse({ " ID " book.id、: " BTITLE " :book.title、 ' bpub_date ' :book.pub_date、 ' パン' :book.read、 ' bcomment ' :book.comment、 ' イメージ':本を。 image.url 場合 book.image 他 「」 }) デフ(自己、リクエスト、PK)を削除します。 「」」 ブックを削除 ルート:DELETE /書籍/ <PK> / :PARAM要求: Param PK: :戻ります: 「」」 してみてください: ブック = BookInfo.objects.get(PK = PK) を除い:BookInfo.DoesNotExist リターンのHttpResponse(ステータス= 404 ) book.delete() 戻りのHttpResponse(ステータス= 204)
テスト:
ポストマン使用のソフトウェア・テスト・インタフェース
1、すべての書籍の情報を取得します
GETアクセス、http://127.0.0.1:8000/books/をステータスコードを返す200とJSONのデータを
2、シングル書籍データを取得します
GETアクセス http://127.0.0.1:8000/books/5/を 、ステータスコードを返す200とJSONのデータを
3、新しい書籍情報
POSTアクセスhttp://127.0.0.1:8000/books/、送信のJSONデータ、ステータスコード、データ、およびJSONを返します
4、データブックを変更
PUTアクセスhttp://127.0.0.1:8000/books/2/、送信のJSONデータ、ステータスコードデータを、そしてJSONを返します
5、データブックを削除
DELETEアクセスhttp://127.0.0.1:8000/books/2/、送信のJSONデータを、ステータスコード204を返します
2、明確なコアミッションRESTインターフェースの開発
上記の場合には、開発中のREST APIのインタフェース、メインビューには3つのことを行うとき:
図1に示すように、データ(例えば、JSON形式)が要求されたクラスオブジェクトモデルに変換されます。
図2に示すように、データベースの操作(CRUD)
図3に示すように、応答モデルクラス・オブジェクト・データを変換する(例えば、JSONデータ・フォーマット)
シリアライズ(直列化)
構造は、別のフォーマット(へのデータ型変換プログラムである辞書、JSON、XMLなど)。例えば、でDjangoのモデルクラスオブジェクトにJSONの文字列、(json.dumpsの配列です()) 。
逆に、他のデータ(辞書、JSON、XMLなどのプログラムのデータには)、例えば、JSONのに文字列のDjangoモデルクラス・オブジェクトは、このプロセスは、()json.load()逆シリアル化と呼ばれています
RESTのAPIを開発する場合、ビューはシリアライズと頻繁に非直列化します。
要約:
現像にRESTのAPIのインターフェイスを、コアがビューで行われる必要がある:1、データベースのデータ(シーケンスjson.dumps()所望のフォーマット、および戻りの前端まで)。図2に示すように、送信されたデータデシリアライゼーションの前端(json.load()データベースに格納されているクラス・オブジェクト・モデル用)。
DjangoのRESTフレームワークが導入されました:
直列化および非直列化データの操作は同じではないが、そのプロセスはと同様に行われる場合、それは、コードの一部が簡略化され、再利用に書き込むことができると言うことです。
現像RESTのAPIの具体的な動作のそれぞれ異なるビューのためのデータが、ビューが、しかし、追加、削除、変更、基本的なルーチンの実装プロセスので、コードのこの部分が書かれているが簡略化多重化されてもよいです。
- :検証要求データ - >直列化復元中に実行 - >データベース保存 - >保存オブジェクト直列化とリターン
- 削除:削除すべきデータがあるかどうかを判断するために - >データベースの実行を削除
- 変更:データが変更されるかどうかを判断するには、存在する - 検証要求データ> - >直列化復元中に実行 - >データベース保存 - >保存オブジェクト直列化とリターンを
- チャールズ:データベースを照会 - >データとリターンをシリアライズ
DjangoのRESTフレームワークは、私たちが大幅に改善し、上記の二つの部分に書かれたコードを簡素化することができますREST APIの開発スピードを。Djangoの RESTフレームワークが構築するためのフレームワークであるWeb APIを強力かつ柔軟なツールを。一般に呼ばDRFフレームまたはREST フレームワーク。DRFのフレームワークは上に構築されているDjangoのでフレームワークの基礎トム・クリスティのオープンソースプロジェクトのダニエル・二次開発。
機能
- 定義されたシリアライザを提供するシリアライザのプロセスは、迅速応じてすることができますDjangoのORM、または他のライブラリ自動シリアライズ/デシリアライズ。
- 、豊富なクラスビューを提供しますミックスインが単純化されたビューを作成し、クラスを拡張します。
- 豊富なカスタマイズレベル:機能ビュー、ビュークラス、自動的に生成するビューのセットAPIを、様々なニーズを満たすために。
- これは、複数の認証と権限の認証方式をサポートしています。
- 内蔵の電流制限のシステム。
- 直感的なAPIの ウェブインターフェース。
- 拡張性を豊かにすることができ、プラグイン