Djangoでプロジェクトを作成する際に必要な作業をまとめた記事です。
ここでご紹介するものは必ずマスターしておきたい超基本コマンドばかりを集めました。
Django学習の最初のとっかかりとして早いところマスターしちゃいましょう。
Djangoを動かす事前準備
仮想環境の用意
# 仮想環境を構築
python3 -m venv venv
# 仮想環境に入る
source venv/bin/activate
venvはvirtual environment(仮想環境)のことです。
仮想環境を構築することでプロジェクトごとに独立した環境を用意でき、ライブラリのバージョン互換性を保ったままコーディングができるようになります。
なお、仮想環境から抜けたい場合にはdeactivateコマンドを使います。
# 仮想環境から抜ける
deactivate
Djangoを開発する際には忘れずに仮想環境に入るようにしてください。
pipのアップグレード
# pipのアップグレード
pip install --upgrade pip
まずはupgrade pipで最新のpipをインストールします。
Djangoのインストール
# djangoのインストール
pip install django
すでに仮想環境を用意したので、先ほど作成したvenvフォルダにDjangoがインストールされます。
プロジェクトの作成
Djangoはプロジェクトとアプリの2つから成り立っており、役割は次の通りです。
- プロジェクト:Webアプリ全体の設定やアプリケーションをまとめる
- アプリ:Webアプリの機能を担当する
ここではDjangoの基礎となるプロジェクトの作成方法を見ていきます。
プロジェクトを作成する
# "new_project"という名前のdjangoプロジェクトの作成
django-admin startproject new_project
このコマンドを実行することで、new_projectフォルダが作成されます。

フォルダ内にはpyファイルが格納されており、ここに必要な情報を追記・変更していきます。
- init.py:Pythonで書かれたことを示す空ファイル。いじらない。
- settings.py:Djangoプロジェクトの設定をする場所。
- urls.py:URLを設定する場所。
- wsgi.py:サーバー関連の設定をする場所。
- manage.py:Djangoを管理する場所。ことあるごとに使う。
ざっくりとこんな感じの理解で良いと思います。
上で紹介したコマンドではプロジェクト名フォルダの下にpyファイルが作成されますが、venvと同じ階層にpyファイルを作成したいときは最後にスペースと.
を入力します。
# "new_project"という名前のDjangoプロジェクトの作成
django-admin startproject new_project .
サーバーの立ち上げ
# サーバーの立ち上げ
python manage.py runserver
manage.pyが格納されているディレクトリで上記のコマンドを実行しましょう。
runserverという引数を渡すことでサーバーが立ち上がります。

ブラウザでhttp://127.0.0.1:8000/にアクセスしてこのような画面が表示されればOKです。
言語を日本語に変更
LANGUAGE_CODE = 'ja'
もともとはen-usとなっていますが、jaとすることで日本語に変更できます。
Djangoインストール成功画面が日本語化されます。

もちろんadmin画面なども日本語になります。
TIME_ZONEを日本に変更
TIME_ZONE = 'Asia/Tokyo'
デフォルトではUTCとなっているので、Asia/Tokyoにして日本時間に合わせておきましょう。
アプリの作成
ここからはWebアプリの機能を担当するアプリを作成します。
機能が複数あるものの場合はアプリが複数になることもあります。
アプリを作成する
# pollsというアプリを作成
python manage.py startapp new_app
これで以下のような形でnew_appというフォルダが作成されます。

プロジェクトの作成時と同様、この中にはすでにたくさんのpyファイルが格納されています。
これらのpyファイルに追記・修正を行うことでWebアプリの機能を実装します。
アプリを登録する
# アプリを登録する
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'new_app',
]
作成したアプリをDjangoに認識させるため、INSTALLED_APPSに追加します。
モデルのデータ構造の設定
from django.db import models
class NewApp(models.Model):
title = models.CharField(blank=False, null=False, max_length=150)
body = models.TextField(blank=True)
created_datetime = models.DateTimeField(auto_now_add=True)
updated_datetime = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
データベースを作るにあたって、どんなデータを格納するかをここで決めます。
- CharField:短文の文字列。
- TextField:長文の文字列。
- DateTimeField:日時情報。auto_now_addで作成日時を、auto_nowで更新日時の設定ができる。
最後の__str__(self)は、adminページなどでどんなラベルでデータを表示するかを決められます。
今回はtitleで設定した短文向けの文字列を表示する設定にしました。
マイグレーションファイルを作成する
# マイグレーションファイルの作成
python manage.py makemigrations
models.pyでデータベースの構造を変更したら、makemigrationsコマンドでマイグレーションファイルを作成します。
マイグレーションファイルの反映
# マイグレーションファイルの反映
python manage.py migrate
上記コマンドでマイグレーションファイルがデータベースに反映されます。

これでデータベースの作成ができました。
モデルをAdminに追加する
from django.contrib import admin
from .models import NewApp
admin.site.register(NewApp)
上記のようにモデルをインポートします。
admin.site.registerを使うことでNewAppモデルをAdminページで使えるようにできます。
以下の方法でadminページに表示する内容を設定できます。
from django.contrib import admin
from .models import NewApp
class NewAppAdmin(admin.ModelAdmin):
admin.site.register(NewApp, NewAppAdmin)
テンプレートフォルダを作成する
# テンプレートファイルを作成する(アプリフォルダ内で)
mkdir templates
cd templates
mkdir new_app
# htmlファイルの作成
cd new_app
touch index.html
フォルダ階層はnew_app/templates/new_appとなっていて、この中にテンプレートとなるhtmlファイルを入れる感じです。
views.pyで使うrender関数はtemplatesフォルダを基準にフォルダを探します。
そのため、templatesフォルダの下にアプリ名フォルダを作り、その下にindex.htmlファイルを作ると別のアプリのindex.htmlと区別できます。
トップページとなるHTMLファイルを作成する
<h1>新しいアプリ</h1>
<p>新しいアプリのトップページです。</p>
トップページにあたるhtmlファイルを作成します。
ビューを作成する
from django.shortcuts import render
def index(request):
return render(request, 'new_app/index.html')
アプリフォルダ内のviews.pyに上記コードを書きます。
requestはWebアプリの閲覧者がページをリクエストしたときに送信される情報で、この場合は「requestが来たらindex.htmlを返してあげてね!」という内容になります。
URLの設定|プロジェクト側
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('new_app.urls')),
]
プロジェクト側のurls.pyでは、URLとアプリの橋渡しをします。
つまりpath関数の第一引数とリクエストを受けたURLがマッチしたら、第二引数に書かれたアプリに処理が進むといった具合です。
今回のようにpath関数の第一引数をブランクにした場合、http:127.0.0.1:8000というリクエストを受けた場合にはnew_appsアプリの処理に進みます。
なおpath(‘new_apps’, include(‘new_apps.urls’))とすれば、http:127.0.0.1:8000/new_appsというリクエストを受けたときにnew_appsの処理に進みます。
URLの設定|アプリ側
# urls.pyを作成
touch urls.py
アプリフォルダにはデフォルトだとurls.pyがないので、自分で作ります。
from django.urls import path
from . import views
app_name = 'new_app'
urlpatterns = [
path('', views.index, name='index'),
]
アプリ側のurls.pyでは、URLとビューの橋渡しをします。
path関数の部分はプロジェクト側のURL設定と考え方は同じで、「http:127.0.0.1:8000にアクセスしたときにはviews.pyのindex関数ファイルを参照する」という設定になります。
またname=’index’とすることでURLパスに名前を付けています。
認証に関する設定
Djangoには標準でログインページが実装されています。
ここでは認証関連の機能を使うための初期設定をご紹介します。
管理者を作成する
python manage.py createsuperuser
createsuperuserコマンドを実行するとログイン情報の設定に進みます。
Username: admin
ユーザー名を指定して
Email address: admin@example.com
メールアドレスを設定したら
Password: **********
Password (again): *********
Superuser created successfully.
パスワードを設定して完了です。
python manage.py runserver
上記コマンドでサーバーを立ち上げてhttp://127.0.0.1:8000/admin/ にアクセスするとログイン画面が表示されます。

先ほど設定した情報を入力します。

無事ログインできました!
admin.pyにモデルを読み込むコードを書くと、読み込んだモデルが追加で表示されるはずです。

このような感じで追加されました!
モデルの内容をHTMLに出力する
モデルのクエリセットをHTMLに渡す
from django.shortcuts import render
from .models import NewApp
def index(request):
new_apps = NewApp.objects.order_by('-created_datetime')
return render(request, 'new_app/index.html', {'new_apps': new_apps})
5行目でモデルのデータをnew_apps変数に格納しています。
order_by()とすることで作成日順に並び替えすることができます。
render関数の第三引数には{‘値’: クエリセット}の形で書き、HTMLファイル内で値を書くことでクエリセットが呼び出せるようになります。
HTML上でクエリセットを呼び出す
<h1>新しいアプリ</h1>
<p>新しいアプリのトップページです。</p>
{{ new_apps }}
Views.pyから渡された値を呼び出すには、{{ 値 }}の形で書きます。
これだけだとインスタンスのリストが表示されるだけなので、それぞれの値まで表示させるようにします。
<h1>新しいアプリ</h1>
<p>新しいアプリのトップページです。</p>
{% for app in new_apps %}
{{ app.title }}
{% endfor %}
上記の通りで、pythonのfor文のような形で呼び出します。
{%%}はWebアプリ上に表示させたくないものを囲むイメージですね。
あとはこれにマークアップしていけばOKです。
<html>
<head>
<title>新しいアプリ</title>
</head>
<body>
<h1>新しいアプリ</h1>
<p>新しいアプリのトップページです。</p>
{% for app in new_apps %}
<div>
<h2>{{ app.title }}</h2>
<p>{{ app.body | truncatechars:20 }}</p>
</div>
{% endfor %}
</body>
</html>
truncatecharsを指定すると表示する上限文字数を決められます。
詳細ページへのリンクを作成する
<html>
<head>
<title>新しいアプリ</title>
</head>
<body>
<h1>新しいアプリ</h1>
<p>新しいアプリのトップページです。</p>
{% for app in new_apps %}
<div>
<h2>{{ app.title }}</h2>
<p>{{ app.body | truncatechars:20 }}</p>
<div>
<a href="{% url 'new_app: detail' app_id=app.id %}">詳細ページへ</a>
</div>
</div>
{% endfor %}
</body>
</html>
13行目を追記しました。
new_appアプリ内のurls.pyでdetailという名前のURLにリンクすることを表しています。
app.idでインデックス番号を取得し、app_id関数に格納しています。これはurls.pyに渡されます。
リンク先となる詳細ページがまだないので、作成します。
from django.urls import path
from . import views
app_name = 'new_app'
urlpatterns = [
path('', views.index, name='index'),
path('detail/<int: app_id>/', views.detail, name='detail'),
]
detail/の後にHTMLで渡したapp_idが入り、これによって詳細ページのリンクが出来上がります。
name=’detail’とすることでHTMLと連絡できるようにしておきましょう。
views.pyのdetailがまだないので作ります。
from django.shortcuts import render
from .models import NewApp
def index(request):
new_apps = NewApp.objects.order_by('-created_datetime')
return render(request, 'new_app/index.html', {'new_apps': new_apps})
def detail(request, app_id):
new_apps = NewApp.objects.get(id=app_id)
return render(request, 'new_app/detail.html', {'new_apps': new_apps})
app_idと一致するデータを探してきて、変数new_appsに代入しています。
そしてこのオブジェクトをdetail.htmlに渡しているので、最後にdetail.htmlを作成していきます。
{{ new_apps.title }}
{{ new_apps.body }}
{{ new_apps.created_datetime }}
{{ new_apps.updated_datetime }}
<a href="{% url 'new_app:index' %}">トップページに戻る</a>
これで詳細ページへの作成と連結が完了しました!
まとめ
以上、Djangoプロジェクトを作成するときの必須コマンドでした。
これらのコードが書けるようになればDjangoによるWebアプリ制作の第一歩を踏み出したと言っても良いと思います。
ここから徐々にできることを増やしていきましょう!
コメント