Django REST frameworkでサーバサイドを作ってみる。

2020年3月14日

django2.2.3,Ubuntu18.04,python3.6で試しています。

こちらのオフィシャルサイトを参考にしてみます

https://www.django-rest-framework.org/

インストール

$ sudo pip3 install djangorestframework
$ sudo pip3 install markdown       
$ sudo pip3 install django-filter 

次はこちらのQuickStartやってみましたが、、

https://www.django-rest-framework.org/tutorial/quickstart/

がやっぱりそのままコピペでは動かせませんでしたので、いろいろ手を加えてやってみます。また使われているモデルは既存のUserとGroupですが、モデルも別途自前モデル追加してやってみます。

プロジェクト、アプリ雛形作

まずはお決まりのProject(名前tutorial),Application(名前quickstart)の作成です。場所は~/drf とします

cd ~/drf
django-admin startproject tutorial
cd tutorial
django-admin startapp quickstart

モデル作成

/tutorial/quickstart/models.pyを編集です。社員テーブルとします。テーブル名Shain

from django.db import models

class Shain(models.Model):
    shain_id = models.CharField(max_length=200)
    shain_name = models.CharField(max_length=200)
    shain_position = models.CharField(max_length=200)


tutorial/tutorial/settings.py を編集して、migrateコマンドでDBに更新されるように追加します。またdjang rest frameworkも追加しておきます。

INSTALLED_APPS = [
    #以下の2行追加
    'rest_framework',
    'quickstart',
]

その後 migrateです。manage.pyのあるフォルダに移動です。

python3 manage.py makemigrations
python3 manage.py migrate

serializer.pyの作成

ここが一番のDjango REST frameworkのキモですかね。以下のコードを 

/quickstart/serializers.py にはりつけます。

from rest_framework import serializers
from .models import Shain

class ShainSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Shain
        fields = ['shain_id', 'shain_name', 'shain_position']


views.pyの作成

次はViewの作成です。

quickstart/views.py

from rest_framework import viewsets
from quickstart.serializers import ShainSerializer
from .models import Shain

class ShainViewSet(viewsets.ModelViewSet):
    queryset = Shain.objects.all()
    serializer_class = ShainSerializer

これだけで実はデータの追加なども出来ちゃいますね。どういう仕組みかはまだ勉強が足りないのでわかりませんが。。

urls.pyの作成

最後はurls.pyです。これはちょっと場所がちがいます。

tutorial/urls.py

from django.urls import include, path
from rest_framework import routers
from quickstart import views

router = routers.DefaultRouter()
router.register(r'shains', views.ShainViewSet)

urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

テスト実行

8001をつけてポート8001で起動です(単に私の環境がテストしすぎで8000が使えないためです)。

python3 manage.py runserver 8001

ブラウザで

http://127.0.0.1:8001/shains/

にアクセスすると、、以下のような画面になれば成功です。

DjangoREST framework Browser1

画面下に何かフォームがありますので、試しにデータを入れてPostしてみます。

DjangoREST framework Browser2

すると実際にデータが登録されます。

DjangoREST framework Browser3

デフォルトのdb.sqlite3 ファイルを実際に見てみますと確かにデータが追加されます。参考までsqlite3のデータ確認コマンドです。

#SQLITEに接続
$ sqlite3 db.sqlite3

#テーブル一覧表示コマンド
sqlite> .table

#セレクト文発行
sqlite> select * from quickstart_shain;


これでいつの日かWEBアプリ、アンドロイドで共通のアプリをリリースする際の共通サーバサイドアプリの準備ができた、かもしれません。。つぎはフロントサイドやってみます。でもリリースまではまだまだ遠いですね。