django(Python) 〜準備編〜

テクノロジー

djangoとは、AIを使ったWebアプリケーションなどシステムの幅が広く、現在最も注目されているWebフレームワークです。
このページはPythonの基礎知識が必須となります。
それでは、簡単なToDoリストのWebアプリケーションを作成してみましょう!

【今回使用する環境】
○ MacBook Air 
      チップ:Apple M2
      バージョン:13.1
○ Python
      バージョン:3.10.7
○ pip
      バージョン:22.3

djangoのインストール

ターミナルにて、以下を実行しインストールします。

$ pip install django

インストールができたら以下コマンドにて、djangoのバージョンを確認できます。

$ python -m django --version

以上! これだけ!!

$ pip install django==x.x.x のように実行することで、バージョンを指定することができます。
また、インストールできるバージョンは $ pip install django== を実行することで、 ERROR: Could not find a version that satisfies the requirement django== (from versions:  のエラーの後のバージョン一覧の記載から確認することができます。

プロジェクトの準備

プロジェクトの作成

まず、プロジェクトをまとめるディレクトリを作りましょう。
今回はToDoリストを作成するということで、ToDoというディレクトリを作成しましょう。
ではcdコマンドで作成したToDoディレクトリに移動し、以下のコマンドを実行します。

$ django-admin startproject config .

django-admin :djangoのコマンドは django-admin で使用します。
startproject:プロジェクトを開始します。という合図です。

それではlsコマンドを実行し、プロジェクトが作成されているか確認しましょう。

$ ls
config		manage.py

configディレクトリと、manage.pyというファイルがあることがわかります。

階層は以下のようになっております。

【階層】
ToDo/
 ├ config/
    ├ __init__.py
    ├ asgi.py
    ├ settings.py
    ├ urls.py
    └ wsgi.py
 └ manage.py

manage.pyは、プロジェクトの操作を行う為のファイルで、基本中身を編集することはありません。

サイトを表示

早速このmanage.pyを実行して、仮想サーバーを立ててみましょう!

$ python manage.py runserver

※ この際 Error: That port is already in use. とエラーが表示された場合
ポート(8000)がすでに使用されているというエラーになる為
$ kill `lsof -ti tcp:8000` を実行し、ポートを落とすか、
$ python manage.py runserver 10000 のように別ポートで開いてください。


この時に、

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

のようなエラーが表示されますが、これは後ほど解決するため
今は無視しましょう。

そしてhttp://127.0.0.1:8000にアクセスすると、

この画面が表示されます。
これにてdjangoプロジェクトが正式に動いていることが確認できました。

アプリの作成

最後の準備として、アプリを作成する必要があります。

$ python manage.py startapp アプリ名

アプリ名はプロジェクト名と同じくToDoにしましょう。
startprojectのようにstartappでアプリを作成します。
lsコマンドで確認すると、

$ ls
ToDo		config		db.sqlite3	manage.py

と、ファイルが増えていることがわかります。

【階層】
ToDo/
 ├ ToDo/
    ├ __init__.py
    ├ apps.py
    ├ models.py
    ├ views.py
    ├ admin.py
    ├ migrations
        └ __init__.py
    └ tests.py
 ├ config/
     ※ 中身省略
 ├ db.sqlite3
 └ manage.py

初期設定

日本語化

http://127.0.0.1:8000にアクセスした際、GoogleChromeの場合右上に以下画像のような表記があったことにお気づきでしょうか?

これは、「このサイトが英語のサイトだから翻訳しますか?」という機能です。
皆様がdjangoで作成するサイトは日本語で作成しますよね?

そこで、日本語のサイトであるという宣言をする必要があります。
config/settings.pyを開いてください。

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

このような表記があるはずです。
(おそらく100行目前後?)

こちらの表記を以下のように修正します。

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

そして、再度サイトにアクセスすると、

右上の機能が消えていることに加えて、サイト全体が日本語になっていることが確認できます!

アプリの登録

プロジェクトでアプリを使用するためにアプリの登録を行う必要がございます。
config/settings.pyからINSTALLED_APPSを探してください。(35行目前後)
そのリストの最後に
‘アプリ名.apps.アプリ設定クラス’,
を追記します。
今回の場合、

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'ToDo.apps.TodoConfig',
]

とする。

この際に気をつけることは、
「アプリ設定クラス」である。
今回の場合、TodoConfigとなっている。
基本的に「アプリ名 + Config」であるが、「ToDo」ではなく「Todo」となっている。

「ToDo(アプリディレクトリ)/apps.py」にて
class TodoConfig(AppConfig):
と記載があるので、こちらから確認してください。

マイグレーション

先ほど、

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

とエラーが表示されたことを覚えていますか?
migration(s) → マイグレーション
「要するにマイグレーションが行われていません。」的なエラーです。
マイグレーションとはデータベースを登録するためのデータで、実行しないとWebアプリケーションとして成り立ちません。

モデルを定義

「ToDo(アプリディレクトリ)/models.py」にて、 # Create your models here. の下に追記します。

from django.db import models

# Create your models here.
class ToDo(models.Model):
    text = models.TextField('テキスト', blank=True)
    finish = models.DateField('終了日')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        return self.text

class ToDo でToDoというテーブルを作成し、
その下で カラム名 = models.カラムタイプField(オプション)
として、カラムを作成します。
それではマイグレーションファイルを作成します。

$ python manage.py makemigrations

を行い、

Migrations for 'ToDo':
  ToDo/migrations/0001_initial.py
    - Create model ToDo

のように表示されるとマイグレーションファイルの作成が完了です。
「ToDo(アプリディレクトリ)/migrations/0001_initial.py」が追加されていることが確認できます。

マイグレーションファイルの作成?????

難しい話ですが、先ほど行ったのは、
マイグレーションファイルの作成です。
マイグレーションファイルはマイグレーションを行う為のファイルで、

モデルの定義 →
→ マイグレーションファイルを作成 →
→ マイグレーションを実行 →
→ データベースにテーブルを作成

の流れとなります。
めんどくさいですね。
大きなプロジェクトに関わり、プロジェクトがごちゃごちゃになってきた時に初めて管理しやすくて助かります。

マイグレーションの実行

マイグレーションファイルも完成したので、マイグレーションの実行の準備が完了いたしましたね!
同じように以下を実行!

$ python manage.py migrate

すると、
〇〇〇〇〇〇…OK
みたいなのがたくさん表示されると思います。
全てOKと表示されていれば問題なくマイグレーションが完了です。

管理画面でデータを確認しよう!

djangoは管理画面の作成が簡単で(他Webフレームワークは知らん)、データ管理などが行える上、拡張性もある為、
まずは管理画面を作成しましょう!

以下を実行します。

$ python manage.py createsuperuser

すると、「ユーザー名・・・」のように表示される為、そこで管理ユーザーの情報を作成します。
入力後エンターキーを押すと次の項目に移動します。
また、パスワードは入力中の表示がされないのでわかりづらいですが、入力はされているため入力後は同じようにエンターキーを押します。
今回は、

ユーザー名:admin
メールアドレス:test@test.com
パスワード:password

とします。

ユーザー名 (leave blank to use 'masayamaeda'): admin
メールアドレス: test@test.com
Password:
Password (again):
このパスワードは一般的すぎます。
Bypass password validation and create user anyway? [y/N]: y

ユーザー名の後ろの括弧は「無記入の場合、この名前を使います。」みたいなことです。
Password(again)はパスワードを間違えているわけではなく「確認用」です。
また、簡単なパスワードを使うと
このパスワードは一般的すぎます。
Bypass password validation and create user anyway? [y/N]:

と表示されます。
「パスワードが簡単だけどいいの〜?」的なことで、Yesの意味であるyを入力し、エンターキーを押します。
複雑なパスワードに越したことはないんだけどね。

Superuser created successfully.
と表示されると管理ユーザーの作成が完了です。

それでは早速管理画面を確認しましょう!

$ python manage.py runserver で起動、
http://127.0.0.1:8000/admin にアクセス

ログイン画面に遷移した!!
先ほどのログイン情報を入力し、ログインしてみましょう。

これが基本的な管理画面です。
では、この画面で先ほどのToDoデータを使用できるようにします。

「ToDo(アプリディレクトリ)/admin.py」の修正をします。

from django.contrib import admin の下に追記
from .models import モデル名

# Register your models here. の下に追記
admin.site.register(モデル名)

今回の場合モデル名はToDoですね。
先ほど作ったやつです。

from django.contrib import admin
from .models import ToDo

# Register your models here.
admin.site.register(ToDo)

それでは、再度管理画面にアクセスします。
すると、

To dos(To do の複数形)という項目ができてる!!
それでは、「追加」を押してデータを追加しましょう。

テキストにToDoの内容、そして終了日を設定し、保存しましょう。

おしまい

お疲れ様でした。
今回は管理画面まで表示しました。
次回はフロントに表示し、データを追加し・・・・
ってところまで書けたらいいなあ。

コメント

タイトルとURLをコピーしました