- Python 3.11.4 / Django 4.2.4
- https://docs.djangoproject.com/ja/4.2/intro/
目次
Djangoの概要
- Djangoの機能
- モデルの設計 Django には Python コードでデータベースのレイアウトを記述したオブジェクトリレーショナルマッパー(ORM)が付属している。データモデル構文ではモデルを表現するさまざまな方法が提供されており、これにより多くのデータベースの問題が解決されてきた。 ↓例
- オブジェクトリレーショナルマッパー: オブジェクト指向プログラミングとリレーショナルデータベースを橋渡しするツールや技術のこと。 プログラム内では、オブジェクトやクラスを使ってデータを扱うことが多いが、リレーショナルデータベースではテーブルとしてデータを保持する。この二つの間の「変換」や「マッピング」を自動で行ってくれるのがORMの役割。 仮に、プログラム内で「ユーザー」というクラスを持っていて、その属性に「名前」「年齢」などがあり、データベースには「ユーザー」というテーブルがあり、カラムとして「名前」「年齢」などがあるとする。このとき、ORMを使うと、プログラム内の「ユーザー」クラスのオブジェクトとデータベースの「ユーザー」テーブルのレコードを相互に変換・対応付けることができる。
- データモデル構文(またはデータモデリング言語): データベースやソフトウェアシステム内のデータの構造や関係を表現するための規則や記法を提供する言語や方法論を指す。
# 例) from django.db import models class Reporter(models.Model): full_name = models.CharField(max_length=70) def __str__(self): return self.full_name class Article(models.Model): pub_date = models.DateField() headline = models.CharField(max_length=200) content = models.TextField() reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE) def __str__(self): return self.headline
- モデルのインストール データベーステーブルを自動で作成する Django のコマンドラインユーティリティを実行する。
python manage.py makemigrations python manage.py migrate
makemigrations コマンドは、利用できるモデルを全て見て、まだ作成されていないテーブルを作るためのマイグレーションを生成する。 migrate コマンドは、マイグレーションを実行し、実際にデータベースにテーブルを作成する。 また、必要に応じて、より強力にスキーマを制御する 機能も提供する。- マイグレーション: Django でモデルに対して行った変更 (フィールドの追加やモデルの削除など) をデータベーススキーマに反映させる方法。データベーススキーマに対するバージョン管理システムのようなもの。
- スキーマ: なにかの構造。データベーススキーマ=データベースの構造。
- 自動生成される API
- API(Application Programming Interface): アプリケーションをプログラミングするためのインターフェース。「アプリケーション、ソフトウェア」と「プログラム」をつなぐもの。
# newsアプリから作成したモデルArticleとReporterをインポート >>> from news.models import Article, Reporter # 現在のReporterオブジェクトを確認し、空であることを確認 >>>Reporter.objects.all() <QuerySet []> # 新しいReporterオブジェクトを作成 >>>r = Reporter(full_name="John Smith") # データベースに保存 You have to call save() explicitly. >>>r.save() # 保存後、ReporterオブジェクトにIDが付与されることを確認 >>>r.id 1 # Now the new reporter is in the database. >>>Reporter.objects.all() <QuerySet [<Reporter: John Smith>]> # フィールドはPythonオブジェクトの属性として表現される >>>r.full_name 'John Smith' # さまざまな方法でデータベースからReporterオブジェクトを検索 >>>Reporter.objects.get(id=1) <Reporter: John Smith> >>>Reporter.objects.get(full_name__startswith="John") <Reporter: John Smith> >>>Reporter.objects.get(full_name__contains="mith") <Reporter: John Smith> >>>Reporter.objects.get(id=2) Traceback (most recent call last): ... DoesNotExist: Reporter matching query does not exist. # 新しいArticleオブジェクトを作成してデータベースに保存 >>>fromdatetimeimport date >>>a = Article( ... pub_date=date.today(), headline="Django is cool", content="Yeah.", reporter=r ...) >>>a.save() # Now the article is in the database. >>>Article.objects.all() <QuerySet [<Article: Django is cool>]> # ArticleオブジェクトもReporterオブジェクトへのAPIアクセスを持つ >>>r = a.reporter >>>r.full_name 'John Smith' # ReporterオブジェクトもArticleオブジェクトへのAPIアクセスを持つ >>>r.article_set.all() <QuerySet [<Article: Django is cool>]> # The API follows relationships as far as you need, performing efficient # JOINs for you behind the scenes. # 記者の名前が"John"で始まる記事を検索 >>>Article.objects.filter(reporter__full_name__startswith="John") <QuerySet [<Article: Django is cool>]> # Reporterオブジェクトの属性を変更してデータベースに保存 >>>r.full_name = "Billy Goat" >>>r.save() # Reporterオブジェクトをデータベースから削除 >>>r.delete()
- 作業場 (scaffold) ではなく完成品 (whole house) の動的な admin インタフェース モデルを作るだけで、Djangoはそのモデルに合わせた本格的な管理画面を自動で生成する。この管理画面では、許可されたユーザーがデータを追加、編集、削除することができる。モデルをこの管理画面で使うためには、そのモデルを管理サイトに登録するだけでOK。
# ここでArticleという新しいデータベースモデルを定義しています。 # Articleモデルにはpub_date, headline, contentというフィールドがあります。 # さらにreporterフィールドはReporterという別のモデルへの外部キーとして定義されています。これは記事が特定の記者に関連付けられることを示しています。 # on_delete=models.CASCADEは、関連するReporterオブジェクトが削除されたときに、その記者に関連するすべてのArticleオブジェクトも自動的に削除されることを意味しています。 from django.db import models class Article(models.Model): pub_date = models.DateField() headline = models.CharField(max_length=200) content = models.TextField() reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
# ここではDjangoの管理画面にArticleモデルを登録しています。 # これにより、Djangoの管理画面を通じてArticleモデルのデータの追加、変更、削除が行えるようになります。 from django.contrib import admin from . import models admin.site.register(models.Article)
- URLの設計 アプリのURLをデザインするには、 URLconf というPythonモジュールを作成する。アプリのコンテンツの目次であり、URLパターンとPythonコールバック関数の間のマッピングが含まれている。
from django.urls import path from . import views urlpatterns = [ path("articles/<int:year>/", views.year_archive), path("articles/<int:year>/<int:month>/", views.month_archive), path("articles/<int:year>/<int:month>/<int:pk>/", views.article_detail), ]
上のコードは、 URL パスを Python のコールバック関数(“views”)にマッピングしている。パス文字列は、パラメータタグを使用して URL から値を取得する。ユーザがページをリクエストすると、Django は各パスを順番に実行し、要求された URL に最初に一致したパスで停止する。 - ビューの自作 各ビュー (view) には二つの役割がある:一つはリクエストされたページのコンテンツを含む HttpResponseオブジェクトを返すこと、もう一つは Http404 のような例外の送出。 一般的に、ビューはパラメーターに従ってデータベースからデータを取り出し、テンプレートをロードして、取り出したデータでテンプレートをレンダリングする。
from django.shortcuts import render from .models import Article def year_archive(request, year): a_list = Article.objects.filter(pub_date__year=year) context = {"year": year, "article_list": a_list} return render(request, "news/year_archive.html", context)
- テンプレートを設計する
{% extends "base.html" %} {% block title %}Articles for {{ year }}{% endblock %} {% block content %} <h1>Articles for {{ year }}</h1> {% for article in article_list %} <p>{{ article.headline }}</p> <p>By {{ article.reporter.full_name }}</p> <p>Published {{ article.pub_date|date:"F j, Y" }}</p> {% endfor %} {% endblock %}
# 静的ファイルの配信を含む例 {%load static %} <html> <head> <title>{%block title %}{%endblock %}</title> </head> <body> <img src="{%static 'images/sitelogo.png' %}" alt="Logo"> {%block content %}{%endblock %} </body> </html>
- モデルの設計 Django には Python コードでデータベースのレイアウトを記述したオブジェクトリレーショナルマッパー(ORM)が付属している。データモデル構文ではモデルを表現するさまざまな方法が提供されており、これにより多くのデータベースの問題が解決されてきた。 ↓例
Djanogoのインストール
- 仮想環境の設定(オプション) Pythonにはvenvというモジュールが含まれており、それを使用して仮想環境を作成することができる。仮想環境は、プロジェクト固有の依存関係を隔離するためのもの。 以下のコマンドで新しい仮想環境を作成できる:
python -m venv myenv
ここでmyenvは作成する仮想環境の名前。任意でつけていい。 仮想環境をアクティブにするには:# Windows myenv\\Scripts\\activate # macOS/Linux source myenv/bin/activate
- Djangoのインストール 仮想環境をアクティブにした状態で、以下のコマンドを実行する。
pip install django
これにより最新の公式リリース版のDjangoがインストールされる。 - バージョンの確認 Djanogoが正しくインストールされたことを確認するために、以下のコマンドでバージョンを確認する。
コメント