今回、Djangoの始め方をまとめてみましたので投稿いたします。Windows11とVSCodeを使用しています。pipが使える環境を想定しています。
後ほど細かく見ていきますので差し当たってやることを列挙します。
全体的な流れ
仮想環境の構築 → Djangoのインストール
shellの起動 → プロジェクトの作成 → アプリの作成
→ アプリをsettings.pyに登録 → index.htmlの作成
→ views.pyでindex.htmlの呼び出し
→ アプリ名/urls.pyを作成しviews.pyのclassを呼び出す
→ プロジェクト名/urls.pyでアプリ名/urls.pyを呼び出す
実際のコード
気を引きたいところには色付けしています。同じ色のところは同じ意味合いのものとしてとらえてもらえればよいかと思います。
#仮想環境の構築
pip install pipenv
pipenv install
#Djangoのインストール
pipenv install Django
#shellの起動
pipenv shell
#プロジェクトの作成
django-admin startproject プロジェクト名
#アプリの作成
cd プロジェクト名
python manage.py startapp アプリ名
#アプリをsettings.pyに登録
INSTALLED_APPS = [
.
.
'アプリ名
',
]
アプリ名ディレクトリ内にtemplates/アプリ名ディレクトリを作成しその中にindex.htmlを作成
#index.html
の作成
<h1>Hello World!</h1>
#views.pyでindex.htmlの呼び出し
from django.views.generic import TemplateView
class IndexView
(TemplateView):
template_name = 'アプリ名
/index.html
'
#アプリ名/urls.pyを作成
しviews.pyのclassを呼び出す
from django.urls import path
from .views import IndexView
urlpatterns = [
path('', IndexView
.as_view()),
]
#プロジェクト名/urls.pyの編集
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('アプリ名
.urls')),
]
ここでpython manage.py runserverしてブラウザでhttp://127.0.0.1:8000/に接続するとHello World!が表示されます。
それでは細かく見ていきます。上記で分かった方はこれ以降は見なくて大丈夫と思います。
仮想環境の構築
まず、VSCodeを起動してどこでもいいので任意のフォルダーを開きます。Shift + Ctrl + @ で新しいターミナルを開きます。ターミナルを開くだけなので他の方法でも構いません。ターミナルがPowerShellで立ち上がっていることを確認してください。
次にpip install pipenvとしてください。pipenvのインストールが始まります。
#仮想環境の構築
pip install pipenv
pipenv install
pipenvのインストールが終わりましたらpipenv installとします。この時ERRORが出るようでしたら、以前にpipenvをインストールされていたのかも知れませんのでpipenv --rmとして削除してみてください。処理が終わりましたら再度pipenv installとします。指定したフォルダーにPipfileとPipfile.lockという2つのファイルができています。
#Djangoのインストール
pipenv install Django
次にpipenv install djangoとします。これでDjangoの開発環境が整いました。このフォルダの中に練習用のプロジェクトや本番用のプロジェクトを作成して行くことになりますので、これから先はこの環境構築の作業は必要なくなります。
プロジェクトの作成
まず、pipenv shellでshellを起動します。
#shellの起動
pipenv shell
次に、プロジェクトを作成します。プロジェクト名は proj01 とします。公式チュートリアルでは「mysite」がこれに当たります。
#プロジェクトの作成
django-admin startproject proj01
するとproj01フォルダー内にもう一つproj01フォルダが作成された状態になります。
次に、cd proj01でプロジェクトフォルダー内に移動しアプリを作成します。cdなどのコマンドの後でフォルダー名やファイル名の始めの1~3文字を入力してからTabキーを押すと候補を表示してくれますので入力ミスを防ぐことができます。アプリ名は app01 とします。公式チュートリアルの「polls」がこれに当たります。
#アプリの作成
cd proj01
python manage.py startapp app01
もしもエラーになる場合はls(エルエス)コマンドで確認してみて下さい。manage.pyが無いフォルダー内で作業しているかも知れません。python manage.pyはmanage.pyファイルを実行するコマンドですので同じフォルダ内に移動してからpython manage.pyを実行してください。
次にsettings.pyにアプリを追加します。settings.pyはプロジェクト(proj01)内の更にproj01の中にあります。
#アプリをproj01/proj01/settings.pyに登録
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01
',
]
これを忘れてしまうとDjangoがapp01を認識できませんので、これから使用するアプリフォルダー内のviews.pyやurls.pyを使ったコマンドが実行できなくなりエラーになります。また、'app01'の後の「、(カンマ)」を忘れないようにしてください。プロジェクトフォルダー内のsettings.pyやurls.pyなどのファイルについては使う頻度が少なく、アプリフォルダー内のファイルで作業することが多いので、ここにあることをしっかり覚えておくとよいと思います。
次に、アプリフォルダ内にtemplatesフォルダを作成し、さらにその中にアプリ名フォルダを作成します。その中にindex.htmlを作成します。とてもややこしいですが結果的に「proj01/app01/templates/app01/index.html」となります。
#proj01/app01/templates/app01/index.html
の作成
<h1>Hello World!</h1>
ここではtemplatesの最後の「s」を忘れないようにして下さい。
このindex.htmlを呼び出す様にviews.pyを編集します。
#views.pyでindex.htmlの呼び出し
from django.views.generic import TemplateView
class IndexView
(TemplateView):
template_name = 'app01
/index.html
'
公式チュートリアルではrenderを使って順を追って解説されています。しかしながら結果的にTemplateViewを使うことになると思うのでここではTemplateViewで進めていきたいと思います。でも、viewを解釈する上でrenderからの進め方はとても大切だと思いますので、ぜひご自分で公式チュートリアルを読み進めてください。import文はほとんど書き変わっています。また、「def」ではなく「class」であることに注意してください。IndexViewはクラス名ですので任意の文字列で構いません。ご自分で決めてもらって大丈夫です。IndexViewクラスはTemplateViewを継承していますので、TemplateViewで定義されているシステムを使用することができます。template_nameはそのシステムの中のひとつで呼び出すhtmlファイルを指定することができます。htmlを指定するときはアプリ名(app01)を付けることを忘れないでください。このアプリ名はtemplatesフォルダー内のアプリ名になります。
次に、このviews.pyで指定したIndexViewクラスを呼び出します。アプリフォルダ内にurls.pyを作成しIndexViewを指定します。アプリフォルダ内にはurls.pyがありませんので新たに作成します。
# app01内にurls.pyを作成
しviews.pyのclassを呼び出すコードを記入
from django.urls import path
from .views import IndexView
urlpatterns = [
path('', IndexView
.as_view()),
]
プロジェクトフォルダー内のurls.pyとは別のファイルですので注意してください。プロジェクトフォルダー内のurls.pyを使用する事はかなり少ないのでほとんどの場合こちらのアプリフォルダ内のurls.pyでの作業になります。import文内の「from .views」で同じフォルダー内のviews.pyを指定して、views.pyの中にあるIndexViewクラスを呼び出しています。urlpatternsのurlの後には「s」は付きませんので注意してください。pathの後の「''」は「localhost:8000」の後に何も指定しなければという意味です。TemplateViewを使用する場合は「.as_view()」を指定する必要があります。path()の後の「、(カンマ)」を忘れないようにしてください。
次にプロジェクトフォルダー内のurls.pyを編集してアプリフォルダ内のurls.pyで指定したIndexViewクラスを呼び出します。
#プロジェクト名/urls.pyの編集
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app01
.urls')),
]
このurls.pyは元からプロジェクトフォルダー内にありますので編集だけで大丈夫です。前半はコメントが大量に書かれています。コメントは削除してしまって構いません。プログラムの実行に必要なのは一番下の数行だけです。 django.urlsから「include」をインポートしています。デフォルトではブラウザのアドレスバーでlocalhost:8000/adminをリクエストするとDjangoの管理画面が表示されるように設定されています。この「path('admin/', admin.site.urls),」の下の行に「path('', include('アプリ名.urls')),」を追加します。そうすることで上から順番にコマンドが実行され、リクエストでadminがヒットすると管理画面が呼び出され、何もヒットしなければapp01.urlsが呼び出されることになります。
次に、ターミナルでpython manage.py runserverを実行してブラウザのアドレスバーにhttp://127.0.0.1:8000/と入力するとHello World!と表示されます。
もし、エラーが出る場合は
ざっと、私が経験したエラーはこれぐらいだと思います(w)。他はあらかじめ準備されているものやVSCodeの予測変換が補完してくれるのでミスは少ないと思います。以上になります。
分かりにくい部分などありましたらお知らせ頂けると助かります。お知らせいただいた内容は公開されることはありません。どの記事から投稿されたかは分かるようにしています。