Python Web Development Using Django in 2023

DjangoはWebアプリ開発のフレームワークです。このブログではPythonも使ってるのが分かりやすくなるように、Django Pythonを紹介します。Djangoはいわゆる「バッテリー付き」フレームワークとしても知られています。何故でしょうか?それは、データベース、管理インターフェースといった機能がデフォルトで含まれているからです。簡単に言うと、このブログではPythonでWeb開発をしようという内容です!

さっそく始めましょう!

Djangoフレームワークを使う理由


  • スケーラビリティが高い
  • 文書が充実している
  • InstagramやSpotifyなどの大手MNCが素早いWeb開発に利用している
  • Webスクレイピング、機械学習、画像処理などの豊富なライブラリと機能がある。これらのおかげでとても有利だ。全てを組み合わせれば、高度なことができる。

それでは、Djangoのアーキテクチャーについて見てみましょう!

Djangoアーキテクチャー


DjangoはMVTアーキテクチャーに基づいています。MVTは「Model View Template」を意味します。以下のパーツがあります。

仮想環境セットアップ

Django Webアプリ開発プロジェクトでは、時に異なるバージョンを使いたいことがあります。この問題はデフォルト環境にいると発生します。

この問題を解決するには、Pythonで仮想環境を使うか、Pythonの開発者を雇って全ての問題を解決・効率化させる必要があります。

これにより、1台のマシン/コンピュータ上で複数のDjango環境を作ることができます。

仮想環境を作るには、ターミナルで下記コマンドを入力します:

python3 -m venv ./name

コードにある「name」というのは仮想環境の名前です。今VENVという名前で仮想環境を作りましょう。

python3 -m venv ./venv

これでvenvという名前のフォルダが下記のサブディレクトリと共に見えるようになります:

サブディレクトリ
仮想環境を作ったらアクティブにしましょう。トリガーするには、以下のコマンドをターミナルに入力します。

source ./venv/bin/activate

上記コマンドの./は作業フォルダーであることを示しています。

ターミナルの各行の始めに(VENV)が表示されているはずです。

Djangoインストール


さあ、Djangoをインストールしましょう!Djangoをインストールするには、以下のようなpipコマンドをターミナルで使用できます。

pip install django

プロジェクトの開始


コンピューターでプロジェクトを開始するには、ターミナルを開いて以下のコマンドを入力します。

django-admin startproject projectName

"ProjectName."という新しいフォルダが作成されることがわかります。そのフォルダ内で、以下のコマンドをターミナルに入力します。

cd projectName

動作を確認するために、サーバーを走らせてみましょう。サーバーを走らせるには、以下のコマンドを入力します。

python manage.py runserver

上記のコマンドを入力した後、http://127.0.0.1:8000/へ行き、以下の画像のように開けるか確認してみてください。

サーバー

プロジェクトの構造


Djangoがインストールされた時点でいくつか主要なファイルが存在します。例えば:

  • Manage.py
  • View.py など

単純なプロジェクト構造は、Webアプリ開発で単純なページアプリを作るのに十分です。プロジェクトフォルダ内には以下の主要なファイルがあります:

  • pycache
  • init.py
  • Asgi.py
  • Settings.py
  • Urls.py
  • Wsgi.py
  • Manage.py

Manage.py: コマンドラインを通じてプロジェクトと通信するために使用されます。

init.py: モジュールまたはパッケージがインポートされた時に開始されるPythonパッケージです。

Settings.py: ウェブサイトの全ての設定が含まれていて、自分で作ったアプリや静的ファイル、データベース設定などを登録できる場所です。

Urls.py: プロジェクトの全リンクがここに保存されます。

Wsgi.py: WSGIでプロジェクトを展開するために使用されます。DjangoアプリとWebサーバーの通信を手助けします。

アプリの作成


Djangoは、完全に管理され、ユニークな管理アプリ構造でよく知られています。各機能ごとに、独立したモジュールとしてアプリを作ることができます。

例えば: ブログを作る場合、コメント、投稿、ログイン/ログアウトの各モジュールを別々に作ることができます。これらの機能はDjangoでは「アプリ」と呼ばれます。簡単に言うと、各機能ごとに異なるアプリがあります。

Djangoは既にインストールされているアプリを提供しています。このプリインストールされたアプリは、

projectName -> projectName -> settings.py

をナビゲートすることで確認することができます。

settings.pyファイルにあるインストールされたアプリを見ることができます。それは以下のように見えるでしょう。

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

独自のカスタムアプリもここで作って追加することができます。Djangoプロジェクトで基本的なアプリを作るには、manage.pyがあるディレクトリに行き、以下のコマンドを入力します。

python manage.py startapp projectApp

さあ、qfq_site_appというアプリを作る時間です。下記のコマンドを追加して同様のアプリを作ってください。

python manage.py startapp qfq_site_app

その後、"qfq_site_app"という名前のディレクトリが見えるようになります。このアプリをアプリリストに表示させるには、installed_appsにプロジェクト名を明記する必要があります。

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

Djangoビュー


「ビュー」はPythonでの関数です。Webからのリクエストを処理してWeb応答を返します。この「ビュー」からの応答はWebページのHTMLコンテンツやリダイレクト、XMLドキュメントや404、画像など何でもあり得ます。

Djangoビューはユーザーインターフェースにとって非常に重要です。テンプレートファイルでCSS/HTML/Javascriptをレンダーして、ブラウザがWebページをレンダリングできるようにします。

ビュー関数の作成方法は?

from django.http import HttpResponse

# 関数を作成
def quokka_view(request):
    return HttpResponse("<h1>QuokkaforQuokkaへようこそ</h1>")

まずは、django.httpモジュールからHttpResponseというクラスをインポートし、Pythonのdatetimeライブラリを使用します。

次に関数を定義します。新しいタイプの関数になります。それぞれの関数は、最初のパラメータとしてHttprequestオブジェクトを取ります。

この関数はページの"ようこそ"というテキストをH1として処理します。さて、どのURLでこの関数を尋ねられ、どう対応するかという質問が出てくるかもしれませんね?

心配しないでください。やっていきましょう。でもその前に、ビューのタイプを見ていきましょう。

関数ベースのビュー

基本戦略の4つに分けられる関数を使用しています:

  • 作成(Create)
  • 取得(Retrieve)
  • 更新(Update)
  • 削除(Delete)

略してCRUDで、開発を使用するあらゆるフレームワークの基本です。

クラスベースのビュー

関数を使ってビューを設定する代わりに、Pythonオブジェクトとしてクラスを使用する別の方法です。クラスベースのビューは関数ベースのビューを取り除くものではありませんが、関数ベースに比べていくつかの利点があります。

Django URLパターン


Djangoでは、各ビューを対応するURLパターンにマッピングする必要があります。これはURLConfというPythonモジュールを介して行われます。

各Urlconfモジュールには、変数URLPATTERNSが含まれている必要があります。

URLPATTERNSは、リクエストできるURLにマッチしているものがセットされています。

これらのパターンは順番に動作して、マッチするものを見つけると、対応するビューが呼び出されます。しかし、マッチするものが見つからない場合は、エラーが表示されます。

私たちのプロジェクトで、qfq_siteというアプリを作成しました。それはURLConfとして使用されるPythonモジュールです。ファイルqfq_site/settings.pyにあるROOT_URLCONFの値として設定されています。デフォルトはqfq_site.urlsになっています。最後に、上で議論した通り、すべての処理が行われます。

qfq_site/urls.pyのサンプルコード:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.quokka_view, name='quokka_view'),
]

別のURLCONFモジュールを追加すると、以下のようになります。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('qfq_site_app.urls'))
]

Djangoモデル


テーブル、フィールド、制約の作成に使用される内蔵機能です。SQLデータベースとしても言及することができますが、Djangoで私たちのWebアプリ開発に使用します。SQLが複雑だということはわかっていますが、Djangoモデルはそれを単純化して、単一のデータベーステーブルにマップします。

複雑なプロジェクトでは、モデルの作成が複雑になることがあります。その場合はPythonの開発者を雇うのが簡単です。

Djangoモデルは、メタデータ処理のようなシンプルさ、一貫したバージョン管理、その他の高度な機能を提供します。

# 標準のDjango Modelをインポート
# 組み込みライブラリから
from django.db import models
from datetime import datetime

class QuokkaModel(models.Model):

    # フィールド名
    title = models.CharField(max_length=200)
    description = models.TextField()
    created_on = models.DateTimeField(default=datetime.now)
    image = models.ImageField(upload_to="images/%Y/%m/%d")

    # モデルのインスタンスを
    # タイトル名でリネーム
    def __str__(self) -> str:
        return self.title

モデルを編集するたびに、makemigrationsコマンドとmigrateコマンドを実行する必要があります。makemigrationsはプリインストールされたアプリと新たにインストールされたアプリモデルのためのものです。

Python manage.py makemigrations

このコマンドはモデルを作成して、

Python manage.py migrate

このコマンドはデータベースのテーブルを作成します。

次には、SQLiteテーブル

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/quokkalabs/python-web-development-using-django-in-2023-1ced