かえるるる(@kaeru_nantoka)です。
本エントリでは、前回記事で書いたAPIを叩くときの検索ワードとして、データベースに登録したものを使用できるようになることを目指します。
本記事では前記事でも扱ったproject, app に加えて
song というアプリを同じプロジェクト内に作成して進めることとします。
project : myTutorial
app : myTutorial/api
myTutorial/song
・目次
1:準備
2:実践
3:おまけ
4:参考にした記事
1:準備
まず、今回扱うモデルとデータは以下の通りです。
# song/models.py from django.db import models class Song(models.Model): song_name = models.CharField(max_length=50) def __str__(self): return self.song_name # Djangoモデル のデータを返す関数 def to_dict(self): return self.song_name
DBにはadmin画面から入れておきます。
今回は、
Lemon (米津玄師) ultrasoul(B'z)
の2曲を入れています。
次に、取得したデータをウェブ上に表示する準備をします。
#api/urls.py from django.urls import path from api import views app_name = 'api' urlpatterns = [ path('hoge/bring_mdl_data/', views.bring_mdl_data, name='bring_mdl_data') ]
#myTutorial/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('song/', include('song.urls')), path('admin/', admin.site.urls), path('api/', include('api.urls')), ]
2:実践
#api/views.py import json from django.http import HttpResponse import requests from song.models import Song #pythonでJSONファイルを返す時に記述 def render_json_response(request, data, status=None): #response を JSON で返却 json_str = json.dumps(data, ensure_ascii=False, indent=2) callback = request.GET.get('callback') if not callback: callback = request.POST.get('callback') # POSTでJSONPの場合 if callback: json_str = "%s(%s)" % (callback, json_str) response = HttpResponse(json_str, content_type='application/javascript; charset=UTF-8', status=status) else: response = HttpResponse(json_str, content_type='application/json; charset=UTF-8', status=status) return response def bring_mdl_data(request, song_name=None): #クエリセットという形式で登録されている曲を全て持ってくる items = Song.objects.all() k = json.dumps([ items[0].to_dict() ]) # items[0] に格納されている Lemon がJSON形式に変換されて k に代入される return render_json_response(request, k) # JSON形式の k をウェブ上に表示する。
127.0.0.1:8000/song/hoge/bring_mdl_data/
に "[\"Lemon\"]"
が表れたら成功です!!
3:おまけ
こうしてDjango model よりWebページ上に引っ張ってきたデータは
フロントのJSで fetch( ' 127.0.0.1:8000/song/hoge/bring_mdl_data/ ' )
でアクセスできます!
(ちなみに console.log( 返り値 ) で Lemon が表示されます。)
4:参考記事
↓こちらの方の記事を参考にしました。ありがとうございました!
DjangoでJSONを使うための一考察 SQLの最適化など - グロブ
以上です!