今回はDjangoの modedls.py について考える
⇒ 前回の内容
1.ディレクトリ構造を確認
myappディレクトリに存在する、現時点で使い方のよくわからないファイルである。
myappディレクトリ
myapp/
│
├── templates/
│ └── myapp/
│ └── index.html # HTMLファイル
└── migrate/
│ └── __init__.py
├── __init__.py
├── admin.py
├── apps.py
├── models.py ← 今回のテーマ
├── tests.py
├── views.py
2.モデルとは(GPT調べ)
Djangoのモデルは、コンピュータにものの情報を覚えさせるための設計図みたいなもの。
例えば、おもちゃのリストを作りたいとする。
リストには、おもちゃの名前や色、値段などが書かれている。
Djangoのモデルは、そういう情報をコンピュータの中で覚えるために存在する。
3.modelsを活用した本リストを考える
modelsを使ってデータベースから本の情報を取得し、それをテンプレートで表示する方法を考える。
3.1 book_list.htmlを追加する
本のデータを表示するHTMLファイルとしてbook_list.htmlをtempletesに追加しておく。
myappディレクトリ
myapp/
│
├── templates/
│ └── myapp/
│ └── index.html
│ ├── book_list.html ← 手動追加したHTMLファイル
└── migrate/
│ └── __init__.py
├── __init__.py
├── admin.py
├── apps.py
├── models.py ← 今回のテーマ
├── tests.py
├── views.py
3.2モデルを作成
まず、本のデータを保存するためのモデルを作成する。
from django.db import models
class Book(models.Model): # Book(本)という名前のモデルを作る
name = models.CharField(max_length=100) # 本の名前
author = models.CharField(max_length=100) # 著者の名前
pages = models.IntegerField() # ページ数
3.3 マイグレーションを実行
データベースにこのモデルのテーブルを作成するためにマイグレーションを実行。
次のコマンドを実行し、マイグレーションファイルを作成する
(ちなみにマイグレーション(migration)の和訳は 移転・移動 である。)
python manage.py makemigrations
次のコマンドでマイグレーションを実行すると、DjangoのデータベースにBookモデル用のテーブルが作成される。
python manage.py migrate
3.4 ディレクトリ構造を確認
myapp/
│
├── templates/
│ └── myapp/
│ └── index.html
│ ├── book_list.html ← 手動追加したHTMLファイル
└── migrations/
│ └── __init__.py
│ ├── 0001_initial.py ← マイグレーションにより生成されたファイル
├── __init__.py
├── admin.py
├── apps.py
├── models.py ← 今回のテーマ
├── tests.py
├── views.py
マイグレーションにより、migrationsフォルダに謎のファイルが生成された。
4.管理画面で本を追加
Djangoの管理画面を使って簡単にデータを追加することができます。
4.1 管理画面で Book モデルを登録
myapp/admin.py に次のコードを追加します。
from django.contrib import admin
from .models import Book
# Bookモデルを管理画面で操作できるように登録
admin.site.register(Book)
4.2 スーパーユーザー(管理者アカウント)を作成
管理画面にアクセスするために、スーパーユーザーを作成する。
python manage.py createsuperuser
ユーザー名、メールアドレス、パスワードを設定する。
4.3 開発用サーバーを起動
http://127.0.0.1:8000/admin/にアクセスし、先程のログイン情報でログインする。
管理画面から Book を選択して、いくつか本を追加してみる。
python manage.py runsever
5.ビューでデータを表示する
5.1 views.py の編集
次に、views.py でデータベースから本のリストを取得し、テンプレートに渡す。
from django.shortcuts import render
from .models import Book # Bookモデルをインポート
def book_list_view(request):
books = Book.objects.all() # データベースからすべての本を取得
return render(request, 'myapp/book_list.html', {'books': books})
5.2 テンプレート の編集
book_list.html は、先ほどのテンプレートと同じ形式で、モデルから取得したデータを繰り返し表示します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>本のリスト</title>
</head>
<body>
<h1>本のリスト</h1>
<ul>
{% for book in books %}
<li>
<strong>タイトル:</strong> {{ book.name }}<br>
<strong>著者:</strong> {{ book.author }}<br>
<strong>ページ数:</strong> {{ book.pages }} ページ
</li>
{% empty %}
<li>本が見つかりませんでした。</li>
{% endfor %}
</ul>
</body>
</html>
4.ルーティング設定
urls.py に新しいビューを紐付けする。
from django.contrib import admin
from django.urls import path
from sample_app.views import welcome_view , clicked_view , book_list_view # ビューをインポート
urlpatterns = [
path('admin/', admin.site.urls),
path('', welcome_view), # ルートURLでようこそを表示
path('clicked/', clicked_view), # ボタンがクリックされたときのURL
path('books/', book_list_view), # /books/ で本のリストを表示
]
5.開発用サーバーを起動
http://127.0.0.1:8000/books/にアクセスする。
管理画面から追加した本の情報が表示されたらOK!
python manage.py runsever