今日から、本格的にDjangoの学習を始めました。
完全に初心者です。まだ右も左も分かっていませんが、せめて今日取り組んだ内容くらいは自分のものにして終わりたい。
という事で、自分の復習用にこの記事を書いています。記事のおおまかな項目は以下の通りです。
- 今日実際に実行したこと
- 所感・感想
また、本記事内に記載してある内容は、全てこちらのyoutube動画の内容によるものです。もしあなたがDjangoを学びたい初学者の方であれば、こちらの動画の視聴を強くお勧めいたします。
1. 今日実際に実行したこと
プロジェクトの作成
Djangoのインストールは済んでいるので、今日はdjangoコマンドをターミナルに入力して、アプリケーションの枠組みを作っていくところから始めました。
まず、プロジェクトルートにて以下のコマンドを実行。
django-admin startproject config src
これにより、プロジェクトルートにsrcディレクトリが作られました。さらに、その中にconfigディレクトリと、manage.pyスクリプトが作成されました。
この/src/manage.pyが、各種アプリを作ってくれるスクリプトファイルのようです。さらに、configディレクトリは、このプロジェクト全体を司る設定に関するスクリプトが入っているみたいでした。
diaryアプリケーションの作成
練習用に、日記を投稿する機能を持ったdiaryアプリケーションの作成を目指します。
まずは/src/manage.pyスクリプトがある場所に移動します。
cd src
次に、diaryアプリケーションを以下のコマンドで作成しました。
python manage.py startapp diary
インフラの設定
ここからは、日記アプリのトップページを作って、サーバを起動してWebアプリを起動しました。
ここら辺が全く理解が追い付いていないので、まずは実際にやった事を振り返って頭の中を整理したいです。
まずは/src/diary/urls.pyスクリプトを新たに作成し、以下のコードを記述しました。
from django.urls import path
from . import views
app_name = "diary"
urlpatterns = [
path("", view.index, name="index"),
]
まず、アプリの名前をapp_nameという変数に代入しています。
そしてurlpatternsをリストで作成。その中に、pathを使って、どのリクエストに対してどの関数が動くかを定義しました。
pathの第一引数は「どんなパスなのか」、第二引数は「そのパスに対して、どんな関数を動かすのか」、第三引数は、このルーティングの定義をこのプロジェクトの中で何と呼ぶのか、名前を定義いています。
ここでは日記アプリのトップページのルーティングを定義しているので、日記アプリのトップページのパスとして空文字を指定、動かす関数は/src/diary/views.index関数、そしてルーティングの名前はindexです。
次に/src/config/urls.pyを開いて、先ほど書いたルーティングを加えました。
from django.urls import path, include # <- add include
urlpatterns = [
path("admin/", admin.site.urls),
path("diary/", include("diary.urls")) # <- add
]
ここには、このプロジェクト全体のルーティングを記載するようです。
そして加えたコードの意味は、diary/というURLのパスに対して、/src/diary/urls.pyを紐づけているという事です。
これによって、URLのパスの先頭にdiary/を付け加えることによって、diaryアプリにアクセスすることができるようになりました。
このようにして、プロジェクトの各種アプリの機能にアクセスするインフラを作るのだろうと理解しました。
次にビューを作ります。/src/diary/views.pyスクリプトを開きます。views.pyは、リクエストを受け取り、レスポンスを作って返す、という役割を持っています。この中身を編集していきます。
from django.shortcuts import render
from django.views import View
class IndexView(View):
def get(self, request):
return render(request, "diary/index.html")
index = IndexView.as_view()
まず、汎用的なビューの基底クラスのViewをインポートします。そしてそれを継承したIndexViewクラスを新たに作成し、getメソッドを作りました。この引数で、ユーザーから送られてきたリクエストオブジェクトを受け取ります。
これが、日記アプリのトップページにアクセスした時に動くメソッドになります。
戻り値にrenderを指定しました。これはレスポンスとして画面を返すものです。第一引数にresponseオブジェクト、第二引数に返す画面のHTMLファイルを指定しています。
そして、index変数にIndexView.as_view()を代入しました。これはIndexViewクラスを関数に変換するものです。
先ほどの/src/diary/urls.pyは、diary/パスに対して、/src/diary/views.py内の、関数に変換したindexを指定した、という意味なのだそうです。
urlpatterns = [
path("", view.index, name="index"),
]
なので、diary/というリクエストが送られてきたら、/src/diary/views.pyのgetメソッドが動く、という仕様になったという事です。
次に/src/templatesディレクトリを作成し、その中にアプリの名前であるdiaryディレクトリを作成しました。そしてその中に、表示画面としてのindex.htmlファイルを作成しました。
そして、このHTMLファイルが入っているディレクトリがどこなのかをプロジェクトの設定で指定する必要があります。
/src/config/settings.pyを開き、TEMPLATES変数の中に入っている辞書の、DIRSキーに対して、以下のコードを記述しました。
TEMPLATES = [
{
# 略
"DIRS": [BASE_DIR / "templates"]
# 略
}
]
さらに、アプリの言語とタイムゾーンもこのファイルで設定しました。
Webアプリを動かす
ここまで来たら、いよいよDjangoのアプリを動かします。ターミナルでmanage.pyの場所まで移動し、以下のコマンドを実行しました。
python manage.py runserver
そして、表示されたURLをコピーし、Webブラウザに張り付け、末尾にdiary/を入力したところ、無事、HTMLファイルの内容を表示してくれました。
2. 所感・感想
この記事を書いて復習した事で、何となくどの部分がどのデータを受け渡ししているのか、というのを認識することができました。
動画内の説明では、他にも重要な概念について解説していたので、そちらの内容も後々しっかりと確認していく予定です。