KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Django を環境構築して View にルーティングする

docs.djangoproject.com

環境構築

python@3.8 が入っていることが前提。

pip@19 から @21 に更新

pip は 使う python を切り替えたりできるバージョン管理ツール

node とは違ってサーバーを動かす機能はない。

最初に入っている@19は Django の要件に満たない?ので更新

venv

venv とは何?なぜ必要?

venv は node には全くない機能。

JS/ node は普通 ディレクトリに直接 node_modules を作成するが

python/ venv は 仮想の python の実行環境を作成して、

そこで python ライブラリをインストールできるようにする。

tutorial.djangogirls.org

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 させるようにする。

DjangoRosettax86 アーキテクチャで入れる

そのまま Arm64 のアーキテクチャで入れるとエラーが出るので

Terminal アプリを右クリックして option -> finder で開く

f:id:kei_s_lifehack:20210920165217p:plain

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

f:id:kei_s_lifehack:20210904202322p:plain

manage.py runserver で動かせた。


Poll App を作る -- startapp

polls プロジェクトを作る

docs.djangoproject.com

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 で含ませる

f:id:kei_s_lifehack:20210920195140p:plain

すると、polls にアクセスできるようになる

f:id:kei_s_lifehack:20210920195707p:plain

代わりに Root にはアクセスできなくなる

開くたびにエラーが出るのは気持ち悪いのでオリジナルで

    path('', include('polls.urls'))

これを追加した

f:id:kei_s_lifehack:20210920200051p:plain

これで root のアクセスで polls/index に動くようにできた。