Django を環境構築して View にルーティングする
環境構築
python@3.8 が入っていることが前提。
pip@19 から @21 に更新
pip は 使う python を切り替えたりできるバージョン管理ツール
node とは違ってサーバーを動かす機能はない。
最初に入っている@19は Django の要件に満たない?ので更新
venv
venv とは何?なぜ必要?
venv は node には全くない機能。
JS/ node は普通 ディレクトリに直接 node_modules を作成するが
python/ venv は 仮想の python の実行環境を作成して、
そこで python ライブラリをインストールできるようにする。
Before we install Django we will get you to install an extremely useful tool to help keep your coding environment tidy on your computer. It's possible to skip this step, but it's highly recommended. Starting with the best possible setup will save you a lot of trouble in the future!
( Django を入れる前にとても便利なこの venv を入れるべき。)
( 使わなくてもいけるけど、強く推奨する。やっておけば未来の多くのトラブルを防げる。)
とこのサイトにも書いてある
venv を起動
ls python3 -m venv django-test ls django-test
作成するとディレクトリが作られる。
django-test % ls bin include lib pyvenv.cfg
中を見てみると、バイナリやライブラリやコンフィグファイルが作られている。
source django-test/bin/activate (django-test) kaede0902@kaede0902s-Air code %
shell ファイルを起動する source コマンドで起動できる。
この python 仮想環境でライブラリを入れて run させるようにする。
Django を Rosetta の x86 アーキテクチャで入れる
そのまま Arm64 のアーキテクチャで入れるとエラーが出るので
Terminal アプリを右クリックして option -> finder で開く
Rosetta で開くを ON にして Terminal を開いてから入れる。
uname -m x86_64
uname -m で x86 アーキテクチャで動いているのを確認できる
Rosetta で開くと M1 での問題を解決できるので、Django が問題なく入る。
(django-test) kaede0902@kaede0902s-Air code % python3 -m pip install Django Collecting Django Downloading Django-3.2.7-py3-none-any.whl (7.9 MB) |████████████████████████████████| 7.9 MB 690 kB/s Collecting pytz Downloading pytz-2021.1-py2.py3-none-any.whl (510 kB) |████████████████████████████████| 510 kB 1.3 MB/s Collecting asgiref<4,>=3.3.2 Downloading asgiref-3.4.1-py3-none-any.whl (25 kB) Collecting sqlparse>=0.2.2 Downloading sqlparse-0.4.2-py3-none-any.whl (42 kB) |████████████████████████████████| 42 kB 891 kB/s Installing collected packages: sqlparse, pytz, asgiref, Django Successfully installed Django-3.2.7 asgiref-3.4.1 pytz-2021.1 sqlparse-0.4.2
Django 3.27 と asgiref, pytz, sqlparse, が この venv に インストールされた
Django Project を作成する
作成して、構成を見る
django-admin startproject djangoProject
これで作成できた
djangoProject % ls djangoProject manage.py
これの中身は、manage.py と、さらに 同名フォルダになっている
ls __init__.py asgi.py settings.py urls.py wsgi.py
その中身に 設定ファイルなどが入っている。
python manage.py runserver
manage.py runserver
で動かせた。
Poll App を作る -- startapp
polls プロジェクトを作る
Django はプロジェクトの中に複数のアプリが入る解釈になる。
サーバーを止めて
python3 manage.py startapp polls
これで作成できる
polls % ls __init__.py admin.py apps.py migrations models.py tests.py views.py
view, model, そして app の構成になっている。app が Controller か?
djangoProject % ls db.sqlite3 djangoProject manage.py polls
djangoProject (親) の下の djangoProject (子供) と並列に作られる。
djangoProject/polls/view を書き足す
from django.shortcuts import render # write your code
最初はこれしか書いてない
from django.http import HttpResponse def index(request): return HttpResponse("Here is poll index")
django.http というライブラリから HttpResponse を import して
def で index を作成して、request を引数で受け取る
そして import した HttpResponse で string で文字列を返すように作る
しかし、これだと この画面が読み込まれないので、urls.py を作らないといけない。
djangoProject/polls/urls.py を作る
自動作成はされない。
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index') ]
path 関数を django.url というライブラリから import する
さっき作った views を 同じ階層から import する
url の パターンとして、空白文字列で、view の index def, 名前を index とする
これが polls アプリ側のルーティングファイル。
次は全体のルーティングファイルを作る
djangoProject/djangoProject/urls.py を作る
作る位置が紛らわしいので注意。
from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
最初からここまでできている
ここに
from django.urls import path, include path('polls/', include('polls.urls')),
django.urls ライブラリから include を追加で持ってきて
polls に polls の urls を include で含ませる
すると、polls にアクセスできるようになる
代わりに Root にはアクセスできなくなる
開くたびにエラーが出るのは気持ち悪いのでオリジナルで
path('', include('polls.urls'))
これを追加した
これで root のアクセスで polls/index に動くようにできた。