概要
ジャンゴ(django)でAPIサーバーを開発する時、モデル(Models)から直接持ってきた情報(QuerySet)をそのままJSONで返したい時があります。このブログポストではジャンゴ(django)を使ってモデル(Models)から持ってきた情報(QuerySet)をそのままJSONタイプで返す方法について説明します。
このブログで紹介するソースコードはGithubに公開されております。下記のリンクで確認してください。
ジャンゴ(django)のプロジェクトの準備
以前のブログシリーズでジャンゴ(django)のプロジェクトを使う方法について説明しました。ジャンゴ(django)を使ってプロジェクトを構成する方法について詳しく内容は下記のリンクを確認してください。
- ジャンゴ(django)インストール
- ジャンゴ(django)のプロジェクト開始
- ジャンゴ(django)のモデル(models)の使い方
- ジャンゴ(django)の管理者ページ
- ジャンゴ(django)のルーティング(Routing)
- ジャンゴ(django)のORM
- ジャンゴ(django)のビュー(View)
- ジャンゴ(django)のフォーム(Form)
- ジャンゴ(django)プロジェクトをヘロク(Heroku)へアップロードする
このブログではジャンゴ(django)のインストールやプロジェクトの設定などについては説明しません。簡単にプロジェクトが進めるレベルで説明します。
下記のコマンドでジャンゴ(django)のプロジェクトを生成します。
django-admin startproject django_response_model_to_json
下記のブログを参考してデーターベース連動やテーブルを作ります。
データーベースの連動が終わったら下記のコマンドで管理者(superuser
)を作ります。
python manage.py createsuperuser
下記のブログを参考してBlog
ジャンゴ(django)のアプリとPost
モデル(Model)を生成します。
そして下記のブログを参考してテストデーターを追加します。
URL作成
テストデーターを持てくるためのURLを生成します。下記のリンクにURLを作る方法について詳しく説明がありますので参考してください。
URLを作成するためdjango_response_model_to_json/urls.py
を開いて下記のように修正します。
from django.contrib import admin
from django.urls import path
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
そしてBlogアプリにURLを追加するためblog/urls.py
を生成して下記のように修正します。
from django.urls import path
from . import views
urlpatterns = [
path('posts/', views.posts, name='posts'),
]
ビュー(View)作成
モデル(Models)から持てきたデーター(QuerySet)をJSONタイプに変換するためビュー(View)を作成します。ジャンゴ(django)のビュー(View)に関しては下記のブログを参考してください。
ビュー(View)を作るためblog/views.py
を開いて下記のように修正します。
from django.shortcuts import render
from django.core import serializers
from django.http import HttpResponse
from .models import Post
def posts(request):
posts = Post.objects.filter(published_at__isnull=False).order_by('-published_at')
post_list = serializers.serialize('json', posts)
return HttpResponse(post_list, content_type="text/json-comment-filtered")
from django.core import serializers
: モデル(Models)をJSONタイプでデーターを直列化捨ためserializersを読んできます。from django.http import HttpResponse
: JSONでデーターをレスポンス(Response)するためHttpResponseを使う予定です。posts = Post.objects.filter(published_at__isnull=False).order_by('-published_at')
: Postモデル(Models)を使ってデーターを持てきます。post_list = serializers.serialize('json', posts)
: 持てきたデーター(QuerySet)をJSONタイプの文字列
で変換します。return HttpResponse(post_list, content_type="text/json-comment-filtered")
: post_listがJSONタイプの文字列
なので(")
を消してJSONをレスポンスします。
確認
今まで作った内容を確認するためジャンゴ(django)のテストサーバーを実行します。
python manage.py runserver
そしてPostmanで当該URL(http://localhost:8000/posts/
)をGETで読んだら下記のようにデーターをちゃんと持ってくることが確認できます。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。