Django REST frameworkでサーバサイドを作ってみる。
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/
にアクセスすると、、以下のような画面になれば成功です。
画面下に何かフォームがありますので、試しにデータを入れてPostしてみます。
すると実際にデータが登録されます。
デフォルトのdb.sqlite3 ファイルを実際に見てみますと確かにデータが追加されます。参考までsqlite3のデータ確認コマンドです。
#SQLITEに接続
$ sqlite3 db.sqlite3
#テーブル一覧表示コマンド
sqlite> .table
#セレクト文発行
sqlite> select * from quickstart_shain;
これでいつの日かWEBアプリ、アンドロイドで共通のアプリをリリースする際の共通サーバサイドアプリの準備ができた、かもしれません。。つぎはフロントサイドやってみます。でもリリースまではまだまだ遠いですね。