【Django入門】超基本コマンドをまとめて紹介!【Python】

  • URLをコピーしました!

Djangoでプロジェクトを作成する際に必要な作業をまとめた記事です。

ここでご紹介するものは必ずマスターしておきたい超基本コマンドばかりを集めました。

Django学習の最初のとっかかりとして早いところマスターしちゃいましょう。

本記事のコードはmacOS用です。
Windowsの場合はコードを適宜読み替えてご活用ください。

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です。

http://127.0.0.1:8000/は自分のパソコンを表します。
最後の8000はポート番号で、外部からアクセスできません。

言語を日本語に変更

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

データベースを作るにあたって、どんなデータを格納するかをここで決めます。

Fieldの種類
  • 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.pyindex関数ファイルを参照する」という設定になります。

またname=’index’とすることでURLパスに名前を付けています。

app_nameを設定しておくことで、HTML側から簡単に呼び出せます。
例){% url ‘new_app: detail’ app_id=app.id %}という感じです。

認証に関する設定

Djangoには標準でログインページが実装されています。

ここでは認証関連の機能を使うための初期設定をご紹介します。

認証情報を設定する前にmigrateする必要があります。
デフォルトで設定されているデータベース情報を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.pydetailがまだないので作ります。

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アプリ制作の第一歩を踏み出したと言っても良いと思います。

ここから徐々にできることを増やしていきましょう!

この記事が気に入ったら
フォローしてね!

シェアしてもらえると喜びます!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Pythonを使ってプログラムを書くお仕事をしています。
業務自動化プログラムの作成が得意で、物販のお仕事をされている方や士業事務所様に業務効率化のツールをご提供させていただいております。
現在自力でWebサービスを作れるようになるべくDjangoを学習中。
お仕事のご相談はお気軽にご連絡ください。

コメント

コメントする