Djangoアプリを作成し、データベースに接続する方法

紹介

Djangoは、Pythonで書かれた無料かつオープンソースのWebフレームワークです。このツールを使用すると、拡張性、再利用性、および迅速な開発が可能です。

このチュートリアルでは、MySQLデータベースに接続されたブログウェブサイトの初期基盤を設定する方法を学びます。これには、django-adminを使用してブログWebアプリケーションの骨組みを作成し、MySQLデータベースを作成し、Webアプリケーションをデータベースに接続する作業が含まれます。

Djangoは、ブログWebアプリケーションを開発するための開発環境を提供しますが、ブログをインターネット上で公開する前にさらなる手順が必要です。

前提条件

このチュートリアルに従うには、次のものが必要です:

すべてがインストールされ、セットアップされたら、次のステップに進むことができます。

ステップ1 — データベースの作成

Djangoはいくつかの人気のあるデータベース管理システムをサポートしていますが、このガイドではDjangoをMySQLデータベースに接続する方法に焦点を当てています。これを行うには、MySQLインスタンス上にデータベースを作成し、Djangoがデータベースに接続するために使用できるMySQLユーザープロファイルも作成する必要があります。

これを設定するには、次のコマンドでroot MySQLユーザーとしてMySQLデータベースに接続します。

  1. sudo mysql

プロンプトが変更されたら、MySQLサーバーに接続していることがわかります。

次のコマンドで現在のデータベースを調査します。

  1. SHOW DATABASES;

これにより、以下の出力が得られます。まだデータベースを作成していない場合を想定しています。

Output
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)

デフォルトでは、すでに4つのデータベースが作成されています:information_schemaMySQLperformance_schemasysです。これらに触れる必要はありません。これらはMySQLサーバー自体に重要な情報を含んでいます。

その代わりに、ブログのデータを保持する初期データベースを作成します。

MySQLでデータベースを作成するには、次のコマンドを実行してください。データベースには意味のある名前を使用してください:

  1. CREATE DATABASE blog_data;

データベースの作成が成功した場合、出力は次のようになります:

Output
Query OK, 1 row affected (0.00 sec)

データベースが利用可能なデータベースの1つとしてリストされていることを確認してください:

  1. SHOW DATABASES;

blog_dataデータベースが、出力に含まれるデータベースのリストに表示されるはずです:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | blog_data | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)

次に、Djangoが新しいデータベースを操作するために使用する別々のMySQLユーザーアカウントを作成します。特定のデータベースとアカウントを作成することで、管理およびセキュリティの観点からサポートを受けることができます。このガイドでは、djangouserという名前を使用します。好きな名前を使用できますが、説明的な名前を選択すると役立ちます:

次に、次のコマンドを入力してユーザーを作成し、パスワードを設定します。この例では、データベースの強力なパスワードを選択してpasswordを置き換えてください:

  1. CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

djangouserが作成したデータベースに完全なアクセス権を持つようにデータベースに通知してください:

  1. GRANT ALL ON blog_data.* TO 'djangouser'@'localhost';

これで、Django用にそれぞれ作成されたデータベースとユーザーアカウントがあります。最近行った変更について現在のMySQLインスタンスが知るように特権をフラッシュします:

  1. FLUSH PRIVILEGES;

これでMySQLサーバーから退出することができます。 EXIT;を書いたり、CTRL + Dを押します。

ステップ2 — MySQLオプションファイルの作成

Django構成ファイルでMySQL接続の詳細を指定する代わりに、それらをオプションファイルに保存できます。多くのMySQLプログラムは、起動オプションや接続の詳細などの情報を含むオプションファイル — 別名構成ファイル — を読み取ることができます。これは便利です。なぜなら、データベースのログイン資格情報を1か所に保存するだけで済むからです。

MySQL資格情報を更新するために、お好みのテキストエディタでmy.cnf構成ファイルを開いてください。ここではnanoを使用します:

  1. sudo nano /etc/mysql/my.cnf

以下の行を追加し、関連する情報を含めてください:

/etc/mysql/my.cnf
…

[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8

注意してください。デフォルトのエンコーディングとしてutf8が設定されています。これはMySQLでUnicodeデータをエンコードする一般的な方法です。詳細が正しいことを確認したら、ファイルを保存して閉じてください。ファイルを編集するためにnanoを使用した場合は、CTRL + Oでファイルを保存し、その後CTRL + Xでエディタを閉じることができます。

ファイルを編集したら、変更を有効にするためにMySQLを再起動してください:

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart mysql

MySQLを再起動すると数秒かかる場合があるため、しばらくお待ちください。

ステップ3 — 初期のDjangoプロジェクトスケルトンの作成

このステップでは、django-adminコマンドを使用してプロジェクトスケルトンを生成することで、アプリケーションの土台を築きます。

ブログアプリを構築するディレクトリに移動します。そのディレクトリ内で、アプリを構築するための特定のディレクトリを作成します。ディレクトリは、構築しているアプリに意味のあるものにします。例として、私たちはmy_blog_appという名前を付けます:

  1. mkdir my_blog_app

次に、新しく作成したディレクトリに移動します:

  1. cd my_blog_app

次に、Djangoで作業するために使用するプログラミング環境に移動します。既存のものを使用するか、新しいものを作成します。次のコマンドは、envという名前の新しい環境を作成しますが、意味のある名前を使用してください:

  1. python3 -m venv env

作成されたら、それをアクティブにします:

  1. . env/bin/activate

まだDjangoをこの環境にインストールしていない場合は、インストールします:

  1. pip install django

my_blog_appディレクトリ内にいる間、次のコマンドを実行してプロジェクトを生成します:

  1. django-admin startproject blog

それが機能したかどうかを確認するために、blog/ディレクトリに移動します:

  1. cd blog

次に、lsを実行して、プロジェクトフォルダ内に必要なファイルとディレクトリが作成されたかどうかを確認します:

  1. ls

出力には、blogディレクトリとmanage.pyファイルがリストされます。

Output
blog manage.py

今、ブログアプリケーションの初期開始を含むプロジェクトディレクトリを作成したので、次のステップに進むことができます。

ステップ4 — MySQLデータベースコネクタのインストール

プロジェクトでMySQLを使用するためには、Djangoと互換性のあるPython 3データベースコネクタライブラリが必要です。このステップでは、そのようなデータベースコネクタであるmysqlclientをインストールする方法について説明します。これはMySQLdbのフォークバージョンです。

まず、必要なMySQL開発ヘッダーとライブラリをインストールします:

  1. sudo apt install libmysqlclient-dev default-libmysqlclient-dev

次に、pipを使用してwheelパッケージをインストールします。wheelは、Pythonのパッケージインデックスからモジュールをインストールするためのパッケージング形式です。wheelパッケージからPythonプログラムをインストールする方が、一般的にソースコードからパッケージをビルドするよりも速く、リソース効率が良いです。wheelパッケージとしてパッケージ化されたプログラムをインストールして使用するには、まずwheelパッケージがインストールされていることを確認する必要があります:

  1. pip install wheel

次に、mysqlclientをインストールします:

  1. pip install mysqlclient

以下のような出力が表示されます。クライアントが正しくインストールされたことが確認されます:

Output
... Successfully installed mysqlclient-2.1.1

これで、PyPi mysqlclientコネクタライブラリを使用してMySQLクライアントを正常にインストールしました。

ステップ5 — 設定の編集

以前に django-admin を実行したとき、Django の構成ファイルである settings.py が作成されました。すべてが正しく機能するようにするために、このファイルのいくつかのデフォルト設定を変更する必要があります。

  1. nano ~/my_blog_app/blog/blog/settings.py

ファイルを編集するには、お好みのテキストエディターでファイルのパスを開きます。このリストのタイムゾーン を参照して、ブログに正しい時間が関連付けられるようにすることができます。この例では、America/New_York 時間を使用します。

ファイル内で、ファイルの下部セクション近くにある TIME_ZONE フィールドに移動します。

~/my_blog_app/blog/blog/settings.py
...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

TIME_ZONE 行を変更して、現在のタイムゾーンに設定します。この例ではニューヨークのタイムゾーンを使用します。

~/my_blog_app/blog/blog/settings.py
...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

次に、静的ファイルのパスを追加する必要があるため、ファイルを開いたままにしてください。Django Web アプリケーションから提供されるファイルは、静的ファイル と呼ばれます。これには、完全な Web ページをレンダリングするために必要な JavaScript、CSS、および画像を含めることができます。

settings.py ファイルの末尾に移動し、STATIC_ROOT を追加します。

~/my_blog_app/blog/blog/settings.py
…

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
...

今、タイムゾーンと静的ファイルのパスを追加したので、IPアドレスを許可されたホストのリストに追加してください。 settings.py ファイルの中で ALLOWED_HOSTS と書かれた行に移動してください。これは、settings.py ファイルの上部にあるはずです。角括弧の間に、サーバーのIPアドレスを単一引用符で囲んで追加してください:

~/my_blog_app/blog/blog/settings.py
...
ALLOWED_HOSTS = ['your_server_IP_address']
...

次に、ディレクトリに関するさまざまな機能を提供するPythonのOSモジュールを追加します。このモジュールがないと、Djangoインターフェイスを使用するための管理ユーザーの設定時にエラーが発生します。これを行うには、各々のオペレーティングシステムで動作する os モジュールをインポートする必要があります。 from pathlib import Path の行の上に import os の行を追加してください:

~/my_blog_app/blog/blog/settings.py
...
import os
from pathlib import Path
...

これまでに、settings.py ファイルを編集して適切なタイムゾーンが設定された状態にしました。また、静的ファイルのパスを追加し、アプリケーションの ipアドレスALLOWED_HOST に設定し、後で管理ユーザーを設定するのにPython OSモジュールをインポートしました。

最後に、DjangoブログアプリケーションをMySQLに接続するためのデータベース接続資格情報をファイルに追加する必要があります。これには、ファイル内の DATABASES ディクショナリを見つけます。デフォルトでは、次のようになります:

~/my_blog_app/blog/blog/settings.py
…

DATABASES = {
	'default': {
    	'ENGINE': 'django.db.backends.sqlite3',
    	'NAME': BASE_DIR / 'db.sqlite3',
	}
}
...

~/my_blog_app/blog/blog/settings.py
...

DATABASES = {
	'default': {
    	'ENGINE': 'django.db.backends.mysql',
    	'OPTIONS': {
        	'read_default_file': '/etc/mysql/my.cnf',
    	},
	}
}
...

'ENGINE': 'django.db.backends.mysql'の行は、Djangoが組み込みのMySQLデータベースバックエンドを使用するように指示しています。 read_default_fileオプションは、以前に編集したMySQLオプションファイルである/etc/mysql/my.cnfを指します。これにより、Djangoはステップ1で作成したMySQLデータベースに接続するための関連する接続詳細を見つける場所を知ることができます。

Djangoは次の順序でデータベース接続設定を読み取ります:

  • OPTIONS
  • NAMEUSERPASSWORDHOSTPORT
  • MySQLオプションファイル

この例のようにDjangoをOPTIONS設定内のMySQLオプションファイルに指定することで、それはそれ以外の場合はオプションファイルをオーバーライドするはずのNAME設定よりも優先されます。 OPTIONS設定の外側でそれを指定する場合。

この時点で、ファイルを保存して閉じることができます。

次に、次のコマンドを実行して移行の変更を確認します:

  1. python manage.py makemigrations

その後、変更が適用されるようにmigrateを実行します:

  1. python manage.py migrate

これで変更が移行されたので、Django管理インターフェイス用の管理ユーザーを作成できます。これをcreatesuperuserコマンドで行います:

  1. python manage.py createsuperuser

ユーザー名、メールアドレス、およびユーザーのパスワードが求められます。

この情報を入力した後、テストを許可するためにファイアウォール設定を調整することができます。

ステップ6 — ファイアウォール設定の調整

Django Webアプリケーションをテストする前に、ファイアウォール設定が調整されていることを確認する必要があります。まず、ufw設定を変更して、ポート8000へのアクセスを許可します:

  1. sudo ufw allow 8000

これらの許可設定が正常に更新されたことを確認するために、ステータスを確認します:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8000 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8000 (v6) ALLOW Anywhere (v6)

ファイアウォール設定は、次のステップで接続をテストするために適切に調整されました。

ステップ7 — アプリケーションへのMySQL接続のテスト

これで、Djangoの構成がMySQLサーバーを正しく検出していることを確認できます。これは、サーバーを実行して確認できます。失敗した場合、接続が正常に機能していません。それ以外の場合、接続は有効です。

まず、次のディレクトリに移動します:

  1. cd ~/my_blog_app/blog/

そこから、次のコマンドを実行します:

  1. python manage.py runserver your-server-ip:8000

次のような出力を受け取ります:

Output
Performing system checks... System check identified no issues (0 silenced). July 19, 2022 - 13:26:08 Django version 4.0.6, using settings 'blog.settings' Starting development server at http://your-server-ip:8000/ Quit the server with CONTROL-C.

注意: 出力に未適用のマイグレーションがあることに気付くでしょう。心配しないでください、これはアプリケーションの初期設定に影響を与えません。続行できます。

指示に従い、提案されたリンク、http://your-server-ip:8000/、を開いてウェブアプリケーションを確認し、正常に動作していることを確認してください。

ページが上記のスクリーンショットと類似している場合、Djangoアプリケーションは期待どおりに動作しています。

アプリのテストが完了したら、CTRL + Cを押してrunserverコマンドを停止してください。これにより、プログラミング環境に戻ります。

Python環境を終了する準備が整ったら、deactivateコマンドを実行できます:

  1. deactivate

プログラミング環境を無効にすると、ターミナルのコマンドプロンプトに戻ります。

結論

このチュートリアルでは、Djangoブログの初期の基礎を作成しました。MySQLをインストール、設定、Djangoバックエンドに接続しました。また、DjangoアプリケーションをMySQLに接続するためのデータベースの資格情報やimport osなどの重要な情報をアプリケーションのsettings.pyファイルに追加しました。また、テストがスムーズに行われるようにファイアウォールの設定を調整しました。

これらの基本的な設定と構成が完了したので、Djangoアプリケーションでモデルの開発とマイグレーションの適用を開始できます。

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-a-django-app-and-connect-it-to-a-database