経緯
とりあえず、DjangoでRESTful APIサーバの作り方を知りたかっただけ。
後悔はしていない。
今回作ったもの
【github】gaku3601/django_mechaerotic
ここに置いときます。
早速男のロマン作ってく
pipで以下を追加しておく。
djangorestframework : RESTful APIサーバがDjangoで作れるようになるもの
django-filter : 入れると検索周りがいい感じに書けるらしい
$ pip install djangorestframework
$ pip install django-filter
いつもどおり、PJとappを作成する。
$ django-admin startproject project .
$ python manage.py startapp erotic
いつもどおり、作成したappをsetting.pyに記述する。
また、djangorestframeworkとdjango-filterを使用する場合、同じく宣言しなければいけないので追記しておく。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'erotic', #追記
'rest_framework', #追記
'django_filters', #追記
]
ここまで来たら、早速モデル定義をしていきます。
今回はセクシー女優モデルと、このモデルと紐づくvideo情報モデルを一対多の関係で作ってみたいと思います。
from django.db import models
# Create your models here.
class SexyActress(models.Model):
name = models.CharField(max_length=20, unique=True)
memo = models.TextField()
"""
管理画面上で表示させる項目を設定する
"""
def __str__(self):
return self.name
class Video(models.Model):
title = models.CharField(max_length=50, unique=True)
sexyActress = models.ForeignKey(SexyActress, related_name='videos', on_delete=models.CASCADE)
url = models.CharField(max_length=300)
memo = models.TextField()
def __str__(self):
return self.title
作成したモデルを管理画面で確認・編集したいので、admin.pyを以下のように編集します。
from django.contrib import admin
from .models import SexyActress, Video
@admin.register(SexyActress)
class SexyActress(admin.ModelAdmin):
pass
@admin.register(Video)
class Video(admin.ModelAdmin):
pass
migrationファイルを作成、適用します。
$ python manage.py makemigrations
$ python manage.py migrate
一旦この状態を管理画面で確認します。
スーパユーザを作成・システムの起動を実施し、http://localhost:8000/admin/にアクセスします。
$ python manage.py createsuperuser
$ python manage.py runserver
🎉作成したモデルが表示、編集できるようになりました(´・ω・`)b🎉
適当にデータ格納しときます。
Django REST FrameworkでAPIを実装していく
Django REST FrameworkではSerializerなるものを作らないといけないらしいので実装していく。
ちなみにSerializerというのはAPIサーバではJson→Pythonモデル、Pythonモデル→Jsonみたいな変換処理が必要になってくるのですが、それを行うものとのことです。
from rest_framework import serializers
from .models import SexyActress, Video
class SexyActressSerializer(serializers.ModelSerializer):
class Meta:
model = SexyActress
fields = ('name', 'memo')
class VideoSerializer(serializers.ModelSerializer):
class Meta:
model = Video
fields = ('title', 'sexyActress', 'url', 'memo')
続きましてViewsをいじっていきます。
import django_filters
from rest_framework import viewsets, filters
from .models import SexyActress, Video
from .serializer import SexyActressSerializer, VideoSerializer
class SexyActressViewSet(viewsets.ModelViewSet):
queryset = SexyActress.objects.all()
serializer_class = SexyActressSerializer
class VideoViewSet(viewsets.ModelViewSet):
queryset = Video.objects.all()
serializer_class = VideoSerializer
ルーティングの設定を行うため、projectとappの両方のurls.pyを以下のように編集します。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('erotic.urls')),
]
from rest_framework import routers
from .views import SexyActressViewSet, VideoViewSet
from django.urls import path, include
router = routers.DefaultRouter()
router.register(r'sexy-actress', SexyActressViewSet)
router.register(r'video', VideoViewSet)
urlpatterns = [
path('', include(router.urls)),
]
これでサーバを起動し、ブラウザでhttp://localhost:8000/api/にアクセスしてみる。
$ python manage.py runserver
こんな感じで、【一覧表示(GET)】【単表表示(GET)】【削除(DELETE)】【更新(PUT)】【作成(POST)】の一連のRESTful APIに必要な機能が瞬殺で作成できる。
おわりに
🎉めっちゃエロいサービスが瞬殺で作成できました🎉
一撃性が強いので、瞬殺でサービスを立ち上げたい場合において、ポテンシャルを半端なく感じました。
覚えることはいろいろありますが、覚えちゃえば早い!これがフルスタックフレームワーク(´・ω・`)