15 Djangoの開発者は、インタフェースをREST

Djangoの開発を使用してRESTインターフェース

  で我々Djangoの本のユースケースでは書籍や文字がサポートするフレームワークを書き込む帳データCRUDRESTの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)
views.py

テスト:

ポストマン使用のソフトウェア・テスト・インタフェース

1、すべての書籍の情報を取得します

GETアクセス、http://127.0.0.1:8000/books/をステータスコードを返す200JSONのデータを

2、シングル書籍データを取得します

GETアクセス http://127.0.0.1:8000/books/5/を 、ステータスコードを返す200JSONのデータを

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の具体的な動作のそれぞれ異なるビューのためのデータが、ビューが、しかし、追加、削除、変更、基本的なルーチンの実装プロセスので、コードのこの部分が書かれているが簡略化多重化されてもよいです。

  1. :検証要求データ - >直列化復元中に実行 - >データベース保存 - >保存オブジェクト直列化とリターン
  2. 削除:削除すべきデータがあるかどうかを判断するために - >データベースの実行を削除
  3. 変更:データが変更されるかどうかを判断するには、存在する - 検証要求データ> - >直列化復元中に実行 - >データベース保存 - >保存オブジェクト直列化とリターンを
  4. チャールズ:データベースを照会 - >データとリターンをシリアライズ

  DjangoのRESTフレームワークは、私たちが大幅に改善し、上記の二つの部分に書かれたコードを簡素化することができますREST APIの開発スピードを。Djangoの RESTフレームワークが構築するためのフレームワークであるWeb APIを強力かつ柔軟なツールを。一般に呼ばDRFフレームまたはREST フレームワーク。DRFのフレームワークは上に構築されているDjangoのでフレームワークの基礎トム・クリスティのオープンソースプロジェクトのダニエル・二次開発。

機能

  • 定義されたシリアライザを提供するシリアライザのプロセスは、迅速応じてすることができますDjangoのORM、または他のライブラリ自動シリアライズ/デシリアライズ。
  • 、豊富なクラスビューを提供しますミックスインが単純化されたビューを作成し、クラスを拡張します。
  • 豊富なカスタマイズレベル:機能ビュー、ビュークラス、自動的に生成するビューのセットAPIを、様々なニーズを満たすために。
  • これは、複数の認証と権限の認証方式をサポートしています。
  • 内蔵の電流制限のシステム。
  • 直感的なAPIの ウェブインターフェース。
  • 拡張性を豊かにすることができ、プラグイン

 

おすすめ

転載: www.cnblogs.com/lishuntao/p/11725453.html