Python(Django)+Vue.js(Nuxt.js,Vuetify)を使ったシステムの開発です。
RESTfulパッケージのインストールは終わっていると思いますので早速使い方です。
今回作成するAPIの機能
リクエスト(問い合わせ)方法
カテゴリーコード(0〜5)を指定して
category APIを getメソッドで呼ぶ
レスポンス(結果)内容
リクエストで指定されたカテゴリーコード(category)をitemテーブルから検索し
結果をJSON形式で返却する
返却する内容は
[
status: 0:成功 1:失敗
message: statusが1の場合にエラーの内容が入る
{
id: 0,
category: 0,
name: "文字列",
price: 999
},
{
件数分繰り返す
}
]
とする。
djangorestframerorkパッケージの読み込み
venvMitsumori > mitsumori > mitsumori > settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'api',
'rest_framework',
'django_filters',
]
・
・
・
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}
Serializerを作成
シリアライザ―とは変数を文字列の変換、この場合はJson文字列に変換するものです。
シリアライズされたものをもとに戻すのはデシリアライズと呼ばれます。
venvMitsumori > mitsumori > api > serializer.py
from rest_framework import serializers
from django_filters import rest_framework as filters
from .models import Item
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id', 'category', 'name', 'price',)
ViewSetを作成
venvMitsumori > mitsumori > api > views.py
from rest_framework import viewsets
from .models import Item
from .serializers import ItemSerializer
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
URLの定義を変更
まずはサイト全体のルーティングを修正します。
venvMitsumori > mitsumori > mitsumori > urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include
from api.urls import router as api_router ←追加
import debug_toolbar
urlpatterns = [
path('admin/', admin.site.urls),
path('__debug__/', include(debug_toolbar.urls)),
# APIアプリケーションのルート追加
url(r'^api/', include(api_router.urls)), ←変更
]
次にapi内のルーティングを修正します。
venvMitsumori > mitsumori > api > urls.py
from django.urls import path
from . import views
from rest_framework import routers
from .views import ItemViewSet
router = routers.DefaultRouter()
router.register(r'category', ItemViewSet)
urlpatterns = router.urls
実行
とりあえず[ http://127.0.0.1:8000/api/ ]をブラウザで開いてみます。
ここではAPIの一覧が表示されるようです
次に[ http://127.0.0.1:8000/api/category ]をブラウザで開いてみます。
商品の一覧が表示されました。
ただ、カテゴリーでの選択はできていません、次回は条件によって取得内容を切り替える処理を書いていきます。
コメント