diadiaスマートフォン用の表示で見るdiadia興味があることをやってみる。自分のメモを残しておきます。apiを実装するためのフレームワークらしい。これはCRUDが得意らしく、webアプリケーションのコンテンツを作るのに役立ちそうだ。4.URFconfが主要な構成単位だ。API機能を実装していくイメージとなる。modelはdjangoのアプリケーションのmodelおそのまま使う。したがって新しくmodels.pyを作成する必要はない。apiのみでプロジェクトを作成する場合にはmodels.pyを作成する必要がある。シリアライザは、入力データのバリデーションを行う役割をもつ。viewは、JSON形式のデータが入ったリクエストオブジェクトを受け取り、API呼び出しに対応するアクションを実行して、JSON形式のレスポンスオブジェクトを作成する役割をもつ。api専用のアプリを既存のwebapp内に追加で作成する手続きをとる。シリアライザ、view,URFconfなので既存のmodel等にコードを付け加えて実装するかと思っていた。これは誤りで新たなappにいろいろ書いていく形をとる。したがって以下のようなコマンド入力が必要となる。apiまたsettings.pyのINSTALLED_APPSのリストに"rest_framework"を追加する。json.上記の通り、あるモデル(ここではSnippetモデル)のインスタンをJSONのような表現形式に変えたり、逆にJSON形式の表現をあるモデルのインスタンスに変形させることを言うのだろう。形式とモデルインスタンスの変換をシリアライザは担当するとイメージするべきだ。参考:https://www.django-rest-framework.org/tutorial/1-serialization/#creating-a-serializer-classシリアライザの種類について確認しているシリアライザの種類は以下になる。explicit.SnippetSerializerでcreateメソッドとupdateメソッドを定義している。これはform.save()でインスタンスを生成したり、更新したのと同様に、serializer.save()でvalidated_dataの内容をインスタンス化するメソッドのようだ。forms.Formを使わずにforms.ModelFormを使うように、serializers.ModelSerializerを使えば楽ができる。ModelSerializerを使うメリットは以下のように記述してあった。methods.要するにあるモデルのフィールドを自動的に複製してくれるのがModelSerializerの1つ目のメリットであり、2つ目のメリットは自動的にcreateメソッドやupdateメソッドを実装してくれることだ。SnippetSerializer(snippet)#serializerインスタンスにはdataアトリビュートがあり、内容を確認できる。datatypesであるらしい。通常のシリアライザはForeignKeyをidで表示する件ForeignKeyを持つあるモデルをシリアライザにかけて表示すると、ForeignKeyはidで表示されてしまう。idを使う場合には良いかもしれないが、__str__で表示したい場合もあるだろう。そのときにはStringRelatedFieldをシリアライザに登録することで解決できる。view(https://www.django-rest-framework.org/api-guide/views/#function-based-views)が存在する。viewはdjangoと同様にviews.pyで使うことになる。viewの種類についてviewの種類は以下のものを確認した。rest_framework.views.APIViewrest_framework.generics.ListAPIViewrest_framework.generics.RetrieveAPIViewrest_framework.generics.ListCreateAPIViewrest_framework.generics.CreateAPIViewrest_framework.generics.UpdateAPIViewrest_framework.generics.DestroyAPIViewrest_framework.generics.RetrieveUpdateAPIViewrest_framework.generics.RetrieveDestroyAPIViewrest_framework.generics.RetrieveUpdateDestroyAPIViewrest_framework.viewsets.ModelViewSetrest_framework.viewsets.ReadOnlyModelViewSet参考:https://www.django-rest-framework.org/api-guide/views/#class-based-viewshttps://www.django-rest-framework.org/api-guide/generic-views/#concrete-view-classeshttps://www.django-rest-framework.org/api-guide/viewsets/#api-referenceイメージクライアント側とオブジェクトを格納するデータベース側という2視点が存在している。クライアント側では常にJSONという形式でデータを送り出したり、受け取ったりする。データベース側ではJSONというデータ形式では新たにインスタンスを作成することができないのでインスタンスを作成するためにデータの形を成型したり、またGETのようなデータベース内のオブジェクトを参照する場合にクライアントのためにJSON形式でデータを送り出す必要があることが想像できると思う。このデータ形式を変換する役割を担っているのがserislizerシリアライザのようだ。このシリアライザはserializers.pyに規定(ModelSerializerやListSerializerを継承)し、views.pyでこの規定したシリアライザを呼び込んで使うようだ。views.pyではViewのような動きを連想させるAPIViewなるものがある。APIViewはクラスベースのviewなのでgetやpostに合わせて挙動を設定する。getの場合はクエリセットしたオブジェクトをクライアントに提供する前にシリアライザを通してJSON化する。クライアントにそれを渡す。postの場合はJSONデータを一度シリアライザを通すことでオブジェクトを作成するのに適したデータ形式に成型する。その結果をsaveメソッドを使いインスタンスを生成する流れをとる。ForeignKeyをシリアライザで表現するには?https://www.django-rest-framework.org/api-guide/relations/#nested-relationshipsGerericForeignKeyをシリアライザで表現するには?https://www.django-rest-framework.org/api-guide/relations/#generic-relationships今困っていること一応DRFをテスト的に実装した。GETに関してはうまく動作している。POSTの動作確認ができない。requestsでJSONデータを投げないといけないがそのやり方がわからないからだ。月別アーカイブはてなブログをはじめよう!torajirousanさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。