4.1 Djangoの導入
Djangoの概要とバージョン
Djangoは、Pythonで書かれたWebアプリケーションフレームワークの1つです。Djangoは、Webアプリケーション開発のための共通的な部分を抽象化し、開発者が高速かつ効率的にWebアプリケーションを開発することができます。Djangoは、MVC(モデル-ビュー-コントローラ)のアーキテクチャに従い、データベースとのやりとり、URLルーティング、フォームの処理、セッション管理などの機能を提供しています。
Djangoの最新バージョンは、2022年2月現在、バージョン3.2.x系列です。また、長期サポート版(LTS)として、3.2.x系列の中でも3.2.10があります。過去には、1.x系列や2.x系列もリリースされています。
Djangoのインストールと設定
Djangoのインストールと設定について、以下の手順で説明します。
1.Pythonのインストール
DjangoはPythonのフレームワークであるため、Pythonをインストールする必要があります。Pythonの公式サイトから、使用しているOSに合わせたインストーラーをダウンロードし、インストールしてください。
2.Djangoのインストール
Djangoは、Pythonのパッケージ管理システムであるpipを用いてインストールできます。ターミナルまたはコマンドプロンプトから以下のコマンドを入力して、Djangoをインストールしてください。
pip install django
インストールが完了すると、以下のようなメッセージが表示されます。
Successfully installed django-3.2.10 pytz-2021.3 sqlparse-0.4.2
3.Djangoプロジェクトの作成
Djangoプロジェクトを作成するには、ターミナルまたはコマンドプロンプトで、以下のコマンドを入力してください。
django-admin startproject プロジェクト名
プロジェクト名は任意の名前をつけてください。このコマンドを実行すると、プロジェクトの基本的なファイルとディレクトリが作成されます。
4.Djangoアプリケーションの作成
Djangoアプリケーションを作成するには、プロジェクトのディレクトリに移動して、以下のコマンドを入力してください。
python manage.py startapp アプリケーション名
アプリケーション名は任意の名前をつけてください。このコマンドを実行すると、アプリケーションの基本的なファイルとディレクトリが作成されます。
5.データベースの設定
Djangoでは、データベースの設定が必要です。プロジェクトディレクトリ内のsettings.pyファイルを開き、以下のようにデータベースの設定を変更してください。
python
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.sqlite3’,
‘NAME’: BASE_DIR / ‘db.sqlite3’,
}
}
この設定では、SQLiteを使用しています。他のデータベースを使用する場合は、ENGINEとNAMEを変更してください。
6. 開発用サーバーの起動
Djangoの開発用サーバーを起動するには、プロジェクトのディレクトリに移動して、以下のコマンドを入力してください。
python manage.py
Djangoの開発環境のセットアップ
Djangoの開発環境をセットアップするためには、以下の手順が必要です。
1.Pythonのインストール
DjangoはPythonのフレームワークなので、まずPythonをインストールする必要があります。Pythonのバージョンは3系を推奨します。インストール方法は、公式サイトからインストーラーをダウンロードして実行するか、OSに組み込まれているパッケージマネージャーを使用してインストールする方法があります。
2.Djangoのインストール
Pythonがインストールされたら、Djangoをインストールします。コマンドラインから以下のコマンドを実行します。
pip install Django
3.Djangoプロジェクトの作成
Djangoのプロジェクトを作成するために、コマンドラインから以下のコマンドを実行します。
php
django-admin startproject <プロジェクト名>
4.アプリの作成
プロジェクトにアプリを追加するために、以下のコマンドを実行します。
php
python manage.py startapp <アプリ名>
5.データベースの設定
Djangoではデータベースを使用するために、設定が必要です。プロジェクト内のsettings.pyファイルにデータベースの設定を追加します。
6.サーバーの起動
開発用のサーバーを起動するには、以下のコマンドを実行します。
python manage.py runserver
これでDjangoの開発環境がセットアップされました。アプリケーションの開発を始めることができます。
4.2 Djangoの基本
プロジェクトとアプリの作成
Djangoにおけるプロジェクトとは、複数のアプリケーションをまとめたもので、Webアプリケーション全体の構成を定義します。一方、アプリケーションとは、プロジェクト内で独立して開発・運用される機能単位のパッケージです。
プロジェクトとアプリを作成する手順を以下に示します。
1.プロジェクトの作成
Djangoのプロジェクトを作成するには、django-admin startprojectコマンドを使用します。コマンドを実行する前に、プロジェクト名を決定し、そのディレクトリで実行する必要があります。
php
$ django-admin startproject <プロジェクト名>
2.アプリの作成
プロジェクト内にアプリケーションを作成するには、python manage.py startappコマンドを使用します。コマンドを実行する前に、アプリ名を決定し、プロジェクトのルートディレクトリで実行する必要があります。
php
$ python manage.py startapp <アプリ名>
以上の手順で、Djangoのプロジェクトとアプリケーションが作成されます。
モデルの定義とマイグレーション
Djangoでは、モデルを使用してデータベースのテーブルを定義します。モデルは models.py ファイルに記述されます。モデルを定義するためには、django.db.models.Model クラスを継承する必要があります。
例えば、blog アプリケーション内で Post モデルを作成する場合、以下のように models.py ファイルに記述します。
python
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
この Post モデルでは、title、content、created_at、updated_at の4つのフィールドが定義されています。title フィールドと content フィールドは、それぞれ CharField と TextField を使用して、文字列データを格納することができます。created_at フィールドと updated_at フィールドは、それぞれ DateTimeField を使用して、日付と時刻の情報を格納することができます。
次に、データベースにテーブルを作成するために、マイグレーションを実行します。マイグレーションは、Djangoが提供するデータベーススキーマのバージョン管理システムです。
まず、以下のコマンドを使用して、マイグレーションファイルを作成します。
python manage.py makemigrations
このコマンドを実行すると、blog/migrations ディレクトリに、マイグレーションファイルが作成されます。このファイルは、データベーススキーマを変更するために必要な SQL 文を格納しています。
次に、以下のコマンドを使用して、マイグレーションを実行します。
python manage.py migrate
このコマンドを実行すると、データベースにテーブルが作成されます。
以上が、Djangoでのモデルの定義とマイグレーションの方法になります。
ビューの作成
Djangoにおけるビューは、リクエストを受けて処理を行い、レスポンスを返すための関数またはクラスのことです。以下にビューの作成方法を示します。
1.views.pyファイルの作成
まず、アプリケーションのディレクトリ内にviews.pyファイルを作成します。views.pyファイルには、ビュー関数を定義します。
2.ビュー関数の定義
ビュー関数は、views.pyファイル内に定義されます。以下は、簡単な例です。
python
from django.shortcuts import render
from django.http import HttpResponse
def my_view(request):
return HttpResponse(“Hello, World!”)
上記の例では、my_viewという関数が定義されています。この関数は、requestという引数を受け取り、HttpResponseオブジェクトを返します。HttpResponseオブジェクトには、HTTPレスポンスとして送信されるテキストが含まれます。
3.URLの設定
ビュー関数をURLにマッピングする必要があります。これを行うには、アプリケーションのurls.pyファイルにURLのパターンを定義し、ビュー関数を参照する必要があります。
python
from django.urls import path
from .views import my_view
urlpatterns = [
path(‘hello/’, my_view, name=’hello’),
]
上記の例では、path()関数を使用して、hello/というパスをmy_view関数にマッピングしています。name引数は、ビューに名前を付けるためのもので、URL逆引きなどで使用されます。
これでビュー関数を定義してURLにマッピングする方法がわかりました。ビュー関数内でデータベースを操作したり、他のアプリケーションやAPIと通信したりすることができます。
テンプレートの作成
Djangoでは、MVCのV(ビュー)に該当する部分がテンプレートです。テンプレートは、HTML、CSS、JavaScriptを用いてウェブページを構築するためのファイルです。ビューから渡されたデータを埋め込んで動的なページを作成することができます。
テンプレートの作成手順は以下の通りです。
- テンプレートを配置するアプリのディレクトリ内にtemplatesディレクトリを作成します。
- templatesディレクトリ内に、テンプレート用のHTMLファイルを作成します。
- テンプレート内で動的に変化する部分を、Djangoのテンプレート言語を用いて記述します。
例えば、以下のように記述します。
html
<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>My Blog</title>
</head>
<body>
<h1>Welcome to My Blog!</h1>
<ul>
{% for post in posts %}
<li><a href=”{% url ‘post_detail’ post.pk %}”>{{ post.title }}</a></li>
{% endfor %}
</ul>
</body>
</html>
上記の例では、{% for %}タグを使って、postsという変数に格納されたブログ記事の一覧を表示しています。また、{% url %}タグを使って、記事の詳細ページへのリンクを作成しています。
テンプレート言語には他にも、if文、コメント、フィルターなどがあります。Django公式ドキュメントに詳細が記載されているので、必要に応じて参照してください。
4.3 Djangoの高度な機能
フォームの作成
Djangoでは、フォームを作成するための便利な機能が提供されています。フォームは、ユーザーからの入力を取得するために使用されます。フォームを作成するためには、formsモジュールを使用します。
まず、forms.pyというファイルを作成し、以下のように記述します。
python
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=255)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
この例では、ContactFormというフォームを定義しています。name、email、messageというフィールドを持ち、それぞれのフィールドに対して、forms.CharFieldやforms.EmailFieldを使用して、フィールドの型を指定しています。
また、max_lengthやwidgetといったオプションを指定することもできます。
これで、フォームが定義されました。このフォームをビューで使用するためには、views.pyでフォームをインスタンス化し、テンプレートに渡します。
python
from django.shortcuts import render
from .forms import ContactForm
def contact(request):
if request.method == ‘POST’:
form = ContactForm(request.POST)
if form.is_valid():
# フォームが正しく入力された場合の処理
pass
else:
form = ContactForm()
return render(request, ‘contact.html’, {‘form’: form})
上記の例では、POSTメソッドでリクエストが送信された場合にフォームをバリデーションし、入力された値が正しい場合は処理を実行するようになっています。
また、GETメソッドでリクエストが送信された場合には、空のフォームを表示するようになっています。
テンプレートでは、formオブジェクトを使用してフォームを表示することができます。
html
{% extends ‘base.html’ %}
{% block content %}
<h1>Contact Us</h1>
<form method=”post”>
{% csrf_token %}
{{ form.as_p }}
<button type=”submit”>Send</button>
</form>
{% endblock %}
上記の例では、{{ form.as_p }}というテンプレートタグを使用して、フォームを表示しています。
これで、Djangoでフォームを作成する方法がわかりました。
認証機能の実装
Djangoでは、認証機能を簡単に実装するためにdjango.contrib.authというアプリケーションが用意されています。これを使うことで、ユーザーの認証や認可、ログインやログアウトなどの機能を実装することができます。
django.contrib.authアプリケーションを使った認証機能を実装するには、以下の手順が必要です。
- django.contrib.authアプリケーションをインストールする
- ログインビューを作成する
- ログアウトビューを作成する
- 認証が必要なページにデコレーターを追加する
まず、django.contrib.authアプリケーションをインストールします。INSTALLED_APPSの設定に’django.contrib.auth’を追加します。
python
#settings.py
INSTALLED_APPS = [
# …
‘django.contrib.auth’,
# …
]
次に、ログインビューを作成します。Djangoには、django.contrib.auth.viewsモジュールにログインビューが用意されています。これを使うことで、ログインフォームの表示や認証処理を簡単に実装することができます。
python
#urls.py
from django.contrib.auth.views import LoginView
urlpatterns = [
# …
path(‘login/’, LoginView.as_view(template_name=’registration/login.html’), name=’login’),
# …
]
上記の例では、LoginViewクラスを使ってログインビューを作成しています。template_name引数で、使用するテンプレートファイルを指定しています。
次に、ログアウトビューを作成します。django.contrib.auth.viewsモジュールにログアウトビューが用意されています。これを使うことで、ログアウト処理を簡単に実装することができます。
python
#urls.py
from django.contrib.auth.views import LogoutView
urlpatterns = [
# …
path(‘logout/’, LogoutView.as_view(next_page=’login’), name=’logout’),
# …
]
上記の例では、LogoutViewクラスを使ってログアウトビューを作成しています。next_page引数で、ログアウト後に遷移するページを指定しています。
最後に、認証が必要なページに@login_requiredデコレーターを追加します。これにより、未ログインの場合はログインページにリダイレクトされるようになります。
pythonfrom django.contrib.auth.decorators import login_required from django.shortcuts import render
@login_required def my_view(request): # ログインが必要な処理 ...
@login_requiredデコレーターを使用することで、my_view関数にアクセスする前に、ユーザーがログインしているかどうかを確認します。もしログインしていなければ、ユーザーをログインページにリダイレクトします。ログインしている場合は、my_view関数を実行します。
APIの実装
APIの実装には、Django REST Framework (DRF)と呼ばれるDjangoの拡張ライブラリを使用することが一般的です。DRFは、RESTful APIを簡単に実装するための機能を提供しています。
以下は、簡単なAPIを実装するための手順です。
1.DRFのインストール
pipコマンドを使ってDRFをインストールします。
pip install djangorestframework
2.シリアライザーの定義
シリアライザーは、DjangoのモデルをJSONやXMLなどの形式に変換するためのクラスです。以下は、モデルをシリアライズするシリアライザーの例です。
python
from rest_framework import serializers
from .models import MyModel
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ‘all‘
3.ビューの定義
ビューは、APIのエンドポイントにアクセスするための関数やクラスです。以下は、モデルの一覧を取得するためのビューの例です。
python
from rest_framework import generics
from .models import MyModel
from .serializers import MyModelSerializer
class MyModelList(generics.ListCreateAPIView):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
4.URLの定義
APIのエンドポイントとビューを結びつけるために、URLを定義します。以下は、ビューを’/mymodels/’エンドポイントにマッピングするURLの例です。
python
from django.urls import path
from .views import MyModelList
urlpatterns = [
path(‘mymodels/’, MyModelList.as_view()),
]
以上の手順で、簡単なAPIを実装することができます。さらに詳しい情報は、公式ドキュメントを参照してください。
コメント