0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python Djangoを使ってみる その3(自分用)

Posted at

今回は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モデルを作成
まず、本のデータを保存するためのモデルを作成する。

myapp/models.py
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 に次のコードを追加します。

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 でデータベースから本のリストを取得し、テンプレートに渡す。

myapp/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 は、先ほどのテンプレートと同じ形式で、モデルから取得したデータを繰り返し表示します。

myapp/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 に新しいビューを紐付けする。

myproject/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

5.追記予定

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?