Djangoのお勉強メモ


Djangoについて触る機会があったので、メモとして残しておきます。

Djangoって何?

webアプリケーションを作成するのに便利なコンポーネントをまとめたフレームワークです。
Pythonで作成されています。
詳しいことや使い方は以下のドキュメントが役立ちます。

Django ドキュメント
https://docs.djangoproject.com/ja/

Django Girls のチュートリアル
https://tutorial.djangogirls.org/ja/

Djangoを使うまでの準備

上記のドキュメントに従い、まずは動かしてみます。
今回の環境は以下の通りです。
OS: Windows 10
エディタ: Visual Studio Code 1.51.1

Pythonのインストールと仮想環境のセットアップ

以下を参考に、Pythonのインストールをします。
https://www.python.jp/install/windows/index.html
※この時の最新は3.9.0でした。

次にPythonを実行する仮想環境を作ります。
VSCodeでフォルダを開き、ターミナルから以下のコマンドを実行します。

python -m venv .venv
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
.venv\Scripts\Activate.ps1

-mは「モジュールを指定して実行する」という意味です。
venvモジュールを実行して、".venv"フォルダに実行環境を作成します。
2つ目のSet-ExecutionPolicyはPowerShellの場合に必要とのこと。
Activate.ps1ファイルを実行して仮想環境を起動します。

Djangoのインストール

仮想環境ができたら、Djangoをインストールするためターミナルから以下のコマンドを実行します。
※ついでにpipの最新化もしておきます。

python -m pip install --upgrade pip
python -m pip install Django

※この時はDjango 3.1.3が最新でした。

VSCodeの拡張機能のインストール

後でデバッグができるように、VSCodeにPythonの拡張機能をインストールします。

Djangoプロジェクトを作る

以下のコマンドでプロジェクトを作成します。manage.pyなど、必要なファイルが自動生成されます。

django-admin startproject Otameshi_prj

manage.pyをVSCodeで開き、左のメニューアイコンから実行→「launch.jsonファイルを作成します」→Django→左上の三角ボタン(デバッグの開始)の順にクリックします。
ターミナルに以下のように表示されたら成功です。

Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

http://127.0.0.1:8000/ にブラウザでアクセスすると、Djangoのページが見えるようになっています。

Djangoアプリケーションを作る

以下のコマンドを実行して、アプリケーションを作成します。ここでも必要なファイルが自動生成されます。

python manage.py startapp Otameshi_app

プロジェクトのurls.pyに、作成したアプリケーションのURLを追加します。

Otameshi_prj/urls.py
 from django.contrib import admin
-from django.urls import path
+from django.urls import include, path

 urlpatterns = [
+    path('Otameshi_app/', include('Otameshi_app.urls')),
     path('admin/', admin.site.urls),
 ]

アプリケーションのフォルダにurls.pyを追加し、indexを設定します。

Otameshi_app/urls.py
+from django.urls import path
+
+from . import views
+
+urlpatterns = [
+    path('', views.index, name='index'),
+]

indexの処理の内容はアプリケーションのviews.pyにメソッドとして定義します。
ここでは"Hello, world."を出力します。

Otameshi_app/views.py
 from django.shortcuts import render
+from django.http import HttpResponse

 # Create your views here.
+
+
+def index(request):
+    return HttpResponse("Hello, world.")

ここまでできたら、またデバッグ実行して、 http://127.0.0.1:8000/Otameshi_app にブラウザでアクセスすると、"Hello, world."と書かれたwebページが表示されます。

Modelの作成

データベースの元となるデータをModelといいます。
ここではCommandという名前で、テキストを保持するデータを作ってみます。

Otameshi_app/models.py
 from django.db import models

 # Create your models here.
+
+class Command(models.Model):
+    cmd = models.TextField()

ソースコードの変更を行ったら、マイグレーションを行って環境に変更を反映します。

python manage.py makemigrations Otameshi_app
python manage.py migrate

アプリケーションの登録と管理者の作成

一通りアプリケーションが動くことが確認できたので、アプリケーションの登録を行います。

Otameshi_prj/settings.py
 INSTALLED_APPS = [
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
+    'Otameshi_app',
 ]
Otameshi_app/admin.py
 from django.contrib import admin
+from .models import Command

 # Register your models here.
+
+admin.site.register(Command)

ここで、管理者設定を行っておきます。以下のコマンドで管理者を登録します。管理者名、メールアドレス、パスワードの入力を要求されるので、適当に入力します。

python manage.py createsuperuser

ここまでできたら、再度デバッグ実行して、 http://127.0.0.1:8000/admin にアクセスします。先ほど設定した管理者名とパスワードを入力すると、アプリケーションと"Command"のAPIが表示されています。

Django REST Frameworkを使う

以下のコマンドでDjango REST Frameworkをインストールします。

pip install djangorestframework

インストールしたら、プロジェクトで使用可能なように設定を行います。

Otameshi_prj/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',
 ]

データの受け渡しを行うために必要なSerializerを作成します。
対象は先ほど作成したCommandで、すべての項目をシリアライズするように設定しておきます。
(といっても現状ではテキスト1項目だけですけど。)

Otameshi_app/serializer.py
+from rest_framework import serializers
+from .models import Command
+
+class CommandSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Command
+        fields = '__all__'

Serializerを作成したら、それを使って表示を行うCommandViewSetを作成します。

Otameshi_app/views.py
 from django.shortcuts import render
 from django.http import HttpResponse
+from rest_framework import viewsets
+from .models import Command
+from .serializer import CommandSerializer

 # Create your views here.

 def index(request):
     return HttpResponse("Hello, world.")
+
+class CommandViewSet(viewsets.ModelViewSet):
+    queryset = Command.objects.all()
+    serializer_class = CommandSerializer

http://127.0.0.1:8000/api/command/ で表示できるように、URL設定をしておきます。Django REST Frameworkに用意されているrouterを使用して、URLとCommandViewSetを対応付けます。

Otameshi_prj/urls.py
 from django.contrib import admin
 from django.urls import include, path
+from Otameshi_app.urls import router 

 urlpatterns = [
-    path('Otameshi_app/', include('Otameshi_app.urls')),
+    path('Otameshi_app/', include(router.urls)),
     path('admin/', admin.site.urls),
 ]
Otameshi_app/urls.py
 from django.urls import path
+from rest_framework import routers

 from . import views

+router = routers.DefaultRouter()
+router.register('command', views.CommandViewSet)
+
 urlpatterns = [
     path('', views.index, name='index'),
 ]

これで再度デバッグを実行し http://127.0.0.1:8000/api/command/ にアクセスすると、登録したデータの一覧が表示されます。
とはいえ、最初は何も表示されていないので、POSTをするとデータが追加されていくことがわかるかと思います。
※不要になったデータは http://127.0.0.1:8000/admin の管理者画面から削除することができます。