LoginSignup
34
20

More than 5 years have passed since last update.

2日前にpythonに初めて触れたド素人がDjango REST Frameworkでめっちゃエロいサービスを瞬殺で作る

Last updated at Posted at 2019-02-21

経緯

とりあえず、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を使用する場合、同じく宣言しなければいけないので追記しておく。

project/settings.py
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情報モデルを一対多の関係で作ってみたいと思います。

erotic/models.py
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を以下のように編集します。

erotic/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

スクリーンショット 2019-02-21 13.07.34.png

🎉作成したモデルが表示、編集できるようになりました(´・ω・`)b🎉
適当にデータ格納しときます。

スクリーンショット 2019-02-21 13.12.13.png

スクリーンショット 2019-02-21 13.12.24.png

Django REST FrameworkでAPIを実装していく

Django REST FrameworkではSerializerなるものを作らないといけないらしいので実装していく。
ちなみにSerializerというのはAPIサーバではJson→Pythonモデル、Pythonモデル→Jsonみたいな変換処理が必要になってくるのですが、それを行うものとのことです。

erotic/serializer.py
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をいじっていきます。

erotic/views.py
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を以下のように編集します。

project/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('erotic.urls')),
]
erotic/urls.py
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

スクリーンショット 2019-02-21 16.22.56.png
スクリーンショット 2019-02-21 16.23.23.png

こんな感じで、【一覧表示(GET)】【単表表示(GET)】【削除(DELETE)】【更新(PUT)】【作成(POST)】の一連のRESTful APIに必要な機能が瞬殺で作成できる。

おわりに

🎉めっちゃエロいサービスが瞬殺で作成できました🎉
一撃性が強いので、瞬殺でサービスを立ち上げたい場合において、ポテンシャルを半端なく感じました。
覚えることはいろいろありますが、覚えちゃえば早い!これがフルスタックフレームワーク(´・ω・`)

参考にさせていただいた文献

Django REST Frameworkを使って爆速でAPIを実装する

34
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
20