DRF+Reactを使用してブログを作成(4)モデルSerializerをパブリッシュし、Viewを使用して+Urls接続を作成


この文章はボリューム調整に失敗したので、内容が長いです...ゆっくりカットして読むことをお勧めします.
前に作成したPost、Comment、Seriesモデルに対応するSerializerおよびviewを作成します.
開始前にヒントを与えるなら、SerializerとViewsに対してその構造を学ぶのが一番の学習方法です.操作方法を直接学ぶことができるからです.ここでは、良いサイトを紹介します.
私がDRFを習い始めた頃から使っていましたが、今も使っています!知らないことがあるたびに、私たちは中に入って構造を見ています.

Serializer


Django-rest-frameworkの基本フレームワークに含まれるインプリメンテーションは、querysetやmodel instanceをJSONなどの形式で簡単にレンダリングできます.また、JSON形式で入力したデータを対象形式に変換するDeserialization機能を提供し、入力データに対して検証作用を実行します.
board/serializers.pyファイルを作成し、コードを記述します.
まずrest frameworkが提供するシーケンス化器機能と以前に作成したモデルをインポートし、作成を開始します.
  • Comment Serializer
    Serializerには様々な形式がありますが、現在のように1つのモデルに直接関係するSerializerはModelSerializerを使用すると便利です.

    コードはご覧のように簡単です.Model Serializerを使用する場合は、Meta classを定義してモデルを指定し、Serializerが書き込むフィールドをフィールドに入れるだけです.
    指摘したいのは、上記の注釈のコードは実際に書かなくてもあまり関係ありません.userもpostも外部キーフィールドなので.ただ、シーケンサのデータを呼び出すときに違いがあります.
    これが少なくなければ
    、これが少なければ.
    個人的に書く傾向がある場合は,上記のコードでコメント処理を行った.
  • PostとSeries Serializer

    この点を指摘したのは新しい内容だけだ.2つのSerializerはいずれもSerializerFieldで異なるSerializerを受信していることがわかる.このような体現をNestedSerializerと呼ぶ.理解のために一例を挙げる.
    PostとSeriesはN:1の関係であるため、PostにはSeriesと呼ばれるフィールド(Series)があり、Seriesには複数のPostフィールド(posts)がある.この場合、postsフィールドをPostSerializerとして指定し、multi=Trueとread only=Trueを与えることで1:N関係を簡単に表すことができる.
  • Views


    DjangoではMVCがMTVとして表現される.モデル-テンプレート-ビュー、位置ビュー->テンプレート、コントローラ->ビュー.つまり、DjangoのViewはコントローラとして機能し、モデルとテンプレートを接続します.ついて来い!ビューにはCRUDのビジネスロジックが含まれており、ビューを介してのみCRUDを作成できます.
    非常に幸せな物語といえば、DRFはViewsetという美しい機能を提供しています.私はすぐにこれがどうしてきれいなのか見に来ました.(Viewsより良い)
    その前に必要なものを輸入しましょう.ファイルはboard/viewsです.Pyです.
  • SeriesViewSet
    一番簡単です.Serializerと同様にModelViewSetというものが存在し,これはViewSetの機能がモデルのCRUDであれば非常に効率的であることを示している.
    ModelViewSetの場合、要求メソッドに応じて異なるタスクが実行されます.
    POST -> Create
    GET -> Read
    PUT -> Update
    DELETE -> Delete
    ビューを使用して異なるビューを作成しますが、ModelViewSetを使用すると、この4つの状況を同時に処理できます.
    この部分は理解しなくても大丈夫です.もう1,2編の文章を読めば理解できる.
  • 以上の3行でSeriesViewSetを完了します.ModelViewSetの場合、querySetとserializer classを指定する必要があります.あとはURLに接続すれば、直接CRUD Seriesができます.
  • PostViewSet
    perform create関数を上書きするコードが追加されました.このperform createは、作成した中間プロシージャを実行する関数です.書き換えの原因はPostにユーザを注入するためである.
    これは後でですが、sessionidを使用して認証を行い、もしそうであれば要求します.userにより,userが誰であるかを知ることができ,他の入力を受け入れずに,このuserを文章の著者に注入する.
  • CommentViewSet

    perform create overrideでユーザーを注入するのは同じですが、postも追加で注入されます.自己kwargsによってpost idを受信する部分は、以下のurlsでさらに説明する.
  • Urls接続


    このセクションでは、作成されたRest APIのエンドポイントを提供します.すなわち、サーバが解放されると、要求がAというUrlに入ると、Bというビューが接続される.
    まずコードに従って書きましょう.
    blog_back/urls.py

    このURL.pyはルートURL、その他のURLです.pyで書いたurlを1つの場所に集約する私たちは取締役会です.urlsにurlを作成し、事前に接続します.
    board/urls.py

    ビューセットを利用するメリットはこれですRouter機能によりurl接続が非常に簡単に行えます.関連情報は上のリンクで学ぶことができます.
    上のCommentでselfを選択します.kwargsを使用する部分はこの行です7が出てきました
    line. 7 CommentViewSetに関連付けられたURLが「post/[post id]/comment」と表示されます.すなわち,そのurlからcommentにアクセスできる,すなわち,要求が来たときにurlにpost idを知るように要求する.したがって,kwargsで受信し,そのPostをComment createに注入した場合の形式である.

    サーバの起動と検証


    プロジェクトrootでサーバを開き、接続が正しいことを確認します.
    pipenv shell
    cd blog_back
    python manage.py makemigrations
    python manage.py migrate
    python manage.py runserver
    前回モデル作成後にmigrateが行われなかったため、完了後にサーバを開きます.その後127.0.0.1:8000で接続すると、次のような画面が表示されます.

    CRUDが正常に動作していることを確認するために、Insomniaというツールがインストールされていることを確認します.
    しかし、ユーザ生成ロジックが実装されていないため、ユーザを提供できず、PostとCommentはCRUD機能を検証できない.
    そこで、Seriesでチェックしてみましょう.
  • POSTによる
  • の作成
  • GET法により生成するシリーズ
  • を決定する.
  • PUT法による検証シリーズ修正
  • GET法により修正された一連の決定
  • DELETEメソッドによりシリーズ
  • を削除
  • 再びGET法により最終確認
  • こうしてCRUDの実装に成功!
    今では模型を自由に操作することができます.思ったより簡単かな?
    次の記事では、User Accountを操作します.