Djangoアプリを作成してデータベースに接続する方法
序章
Django は、Pythonで記述された無料のオープンソースWebフレームワークです。 This tool allows for scalability, reusability, and rapid development.
このチュートリアルでは、MySQLデータベースに接続するブログWebサイトの初期基盤を設定する方法を学習します。 これには、を使用してブログWebアプリケーションのスケルトン構造を作成することが含まれます django-admin
、MySQLデータベースを作成し、Webアプリケーションをデータベースに接続します。
Djangoは、ブログWebアプリケーションで作業するための開発環境を提供しますが、ブログをインターネット上で公開する前に、さらに多くの手順を実行する必要があります。
前提条件
To follow this tutorial, you will need:
- An Ubuntu 22.04 server with a non-root
sudo
-有効なユーザーとファイアウォール。 Follow our Ubuntu 22.04 initial server setup guide to set this up. - データベースとして機能するようにインストールされたMySQL。 You can set this up by following our tutorial on How To Install MySQL on Ubuntu 22.04.
- Python環境がセットアップされました。 For this, follow our tutorial on How To Install Python 3 and Set Up a Programming Environment on Ubuntu 22.04 .
すべてがインストールおよびセットアップされたら、最初のステップに進むことができます。
ステップ1—データベースの作成
Djangoは多くの一般的なデータベース管理システムをサポートしていますが、このガイドではDjangoをMySQLデータベースに接続することに焦点を当てています。 これを行うには、MySQLインスタンスにデータベースを作成する必要があります。また、Djangoがデータベースへの接続に使用できるMySQLユーザープロファイルを作成する必要があります。
To set this up, connect to your MySQL database as the root MySQL user with the following command:
- sudo mysql
You know you’re in the MySQL server when the prompt changes:
-
次のコマンドを使用して、現在のデータベースを検査します。
- SHOW DATABASES;
Your output will be similar to the following, assuming that you haven’t created any databases yet:
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
デフォルトでは、4つのデータベースがすでに作成されています。 information_schema
, MySQL
, performance_schema
と sys
. MySQLサーバー自体にとって重要な情報が含まれているため、これらに触れる必要はありません。
代わりに、ブログのデータを保持する初期データベースを作成してください。
MySQLでデータベースを作成するには、データベースに意味のある名前を使用して、次のコマンドを実行します。
- CREATE DATABASE blog_data;
Upon successful creation of the database, your output will be the following:
OutputQuery OK, 1 row affected (0.00 sec)
データベースが使用可能なデータベースの1つとしてリストされていることを確認します。
- SHOW DATABASES;
The blog_data
これで、データベースが出力に含まれるデータベースの中にリストされるはずです。
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| blog_data |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
次に、Djangoが新しいデータベースを操作するために使用する別のMySQLユーザーアカウントを作成します。 特定のデータベースとアカウントを作成すると、管理とセキュリティの観点からサポートできます。 We will use the name djangouser in this guide. You can use whatever name you’d like, but it can be helpful to choose a name that’s descriptive.
このアカウントを作成し、パスワードを設定して、作成したデータベースへのアクセスを許可します。 まず、ユーザーを作成し、次のコマンドを入力してパスワードを設定します。 Remember to choose a strong password for your database by replacing password
この例では:
- CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
djangouserが設定したデータベースに完全にアクセスできる必要があることをデータベースに通知します。
- GRANT ALL ON blog_data.* TO 'djangouser'@'localhost';
これで、データベースとユーザーアカウントができました。それぞれ、Django専用に作成されています。 MySQLの現在のインスタンスが最近行った変更を認識できるように、特権をフラッシュします。
- FLUSH PRIVILEGES;
With that complete, you can exit the MySQL server by writing EXIT;
またはを押す CTRL + D
.
ステップ2—MySQLオプションファイルを作成する
MySQL接続の詳細をDjango構成ファイルで指定する代わりに、オプションファイルに保存できます。 多くのMySQLプログラムは、起動オプションや接続の詳細などの情報について、オプションファイル(構成ファイルとも呼ばれます)を読み取ることができます。 これは、データベースのログイン資格情報を1か所に保存するだけでよいので便利です。
を開きます my.cnf
MySQLクレデンシャルを更新するための好みのテキストエディタを含む構成ファイル。 ここでは使用します nano
:
- sudo nano /etc/mysql/my.cnf
次の行を追加し、関連情報を含めます。
…
[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8
Notice that utf8
is set as the default encoding. This is a common way to encode unicode data in MySQL. 詳細が正しいことを確認したら、ファイルを保存して閉じます。 使用した場合 nano
ファイルを編集するには、を押して編集できます CTRL + O
to save the file and then CTRL + X
to close the editor.
Once the file has been edited, restart MySQL for the changes to take effect:
- sudo systemctl daemon-reload
- sudo systemctl restart mysql
MySQLの再起動には数秒かかることに注意してください。しばらくお待ちください。
ステップ3—最初のDjangoプロジェクトスケルトンを作成する
このステップでは、を使用してプロジェクトスケルトンを生成することにより、アプリケーションの基礎を築きます。 django-admin
指図。
ブログアプリを作成するディレクトリに移動します。 そのディレクトリ内に、アプリをビルドするための特定のディレクトリを作成します。 構築しているアプリにとって意味のあるディレクトリを呼び出します。 例として、私たちの名前を付けます my_blog_app
:
- mkdir my_blog_app
次に、新しく作成したディレクトリに移動します。
- cd my_blog_app
次に、Djangoでの作業に使用するプログラミング環境に移動します。 既存のものを使用することも、新しいものを作成することもできます。 The following command creates a new environment called env
、ただし、意味のある名前を使用する必要があります。
- python3 -m venv env
作成したら、アクティブ化できます。
- . env/bin/activate
まだインストールしていない場合は、この環境にDjangoをインストールします。
- pip install django
にいる間 my_blog_app
ディレクトリで、次のコマンドを実行してプロジェクトを生成します。
- django-admin startproject blog
に移動して、機能することを確認します blog/
ディレクトリ:
- cd blog
次に実行します ls
必要なファイルとディレクトリがプロジェクトフォルダ内に作成されたことを確認するには、次の手順に従います。
- ls
出力には、 blog
ディレクトリと manage.py
ファイル:
Outputblog manage.py
Now that you’ve created a project directory containing the initial start of your blog application, you can continue to the next step.
ステップ4—MySQLデータベースコネクタをインストールする
In order to use MySQL with your project, you need a Python 3 database connector library compatible with Django. このステップでは、そのようなデータベースコネクタを1つインストールする方法の概要を説明します。 mysqlclient
、のフォークバージョンです MySQLdb
.
まず、必要なMySQL開発ヘッダーとライブラリをインストールします。
- sudo apt install libmysqlclient-dev default-libmysqlclient-dev
次に、 pip
インストールするには wheel
パッケージ。 Wheel は、PythonPackageIndexからモジュールをインストールするためにPythonで使用されるパッケージ形式です。 ホイールパッケージからPythonプログラムをインストールする方が、ソースコードからパッケージをビルドするよりも一般的に高速でリソース効率が高くなります。 In order to install and work with programs packaged as wheels, you first need to ensure the wheel
パッケージがインストールされています:
- pip install wheel
次に、インストールを続行します mysqlclient
:
- pip install mysqlclient
Your output will be similar to the following, verifying that the client was properly installed:
Output...
Successfully installed mysqlclient-2.1.1
これで、PyPiを使用してMySQLクライアントが正常にインストールされました。 mysqlclient
コネクタライブラリ。
ステップ5—設定の編集
あなたが走ったとき django-admin
以前は、Djangoの構成ファイルを作成しました。 settings.py
. すべてを正しく機能させるには、このファイルのデフォルト設定のいくつかを変更する必要があります。
ファイルを編集するには、選択したテキストエディタでファイルへのパスを開きます。
- nano ~/my_blog_app/blog/blog/settings.py
あなたのブログがあなたの地域に関連付けられた正しい時間を持っているために、あなたは編集することができます settings.py
現在のタイムゾーンを使用するようにファイルします。 このタイムゾーンのリストを参照として使用できます。 For our example, we will use America/New_York
時間。
ファイル内で、に移動します TIME_ZONE
ファイルの下部セクションの近くのフィールド:
...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
...
を変更します TIME_ZONE
line, so it is set to your current time zone. この例では、ニューヨークのタイムゾーンを使用します。
...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'America/New_York'
USE_I18N = True
...
Keep the file open because next, you need to add a path for your static files. Django Webアプリケーションから提供されるファイルは、静的ファイルと呼ばれます。 これには、JavaScript、CSS、画像など、Webページ全体をレンダリングするために必要なファイルを含めることができます。
最後に移動します settings.py
ファイルして追加 STATIC_ROOT
:
…
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
...
静的ファイルのタイムゾーンとパスを追加したので、許可されたホストのリストにIPを追加します。 の行に移動します settings.py
それが言うところのファイル ALLOWED_HOSTS
、それは上に向かっているでしょう settings.py
ファイル。 角かっこで囲まれたサーバーのIPアドレスを一重引用符で囲んで追加します。
...
ALLOWED_HOSTS = ['your_server_IP_address']
...
次に、ディレクトリにさまざまな機能を提供するPythonOSモジュールを追加します。 このモジュールがないと、Djangoインターフェースの使用を開始するように管理ユーザーを設定するときにエラーが発生します。 これを行うには、インポートする必要があります os
それぞれのオペレーティングシステムで動作するモジュール。 行を追加します import os
の上に from pathlib import Path
ライン:
...
import os
from pathlib import Path
...
これまでに編集しました settings.py
適切なタイムゾーンが設定されているようにファイルします。 静的ファイルのパスも追加しました。 ip address
になるために ALLOWED_HOST
アプリケーション用に作成し、Python OSモジュールをインポートして、後で管理ユーザーを設定できるようにします。
ファイルに追加する最後のスニペットは、DjangoブログアプリケーションをMySQLに接続するためのデータベース接続クレデンシャルです。 この目的のために、 DATABASES
ファイル内の辞書。 デフォルトでは次のようになります。
…
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
...
交換してください DATABASES
辞書の ENGINE
と NAME
次の行のオプション:
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/etc/mysql/my.cnf',
},
}
}
...
The 'ENGINE': 'django.db.backends.mysql'
行は、Djangoに組み込みのMySQLデータベースバックエンドを使用するように指示します。 The read_default_file
オプションは /etc/mysql/my.cnf
、前に編集したMySQLオプションファイル。 これにより、ステップ1で作成したMySQLデータベースに接続するための関連する接続の詳細をどこで見つけることができるかがDjangoに通知されます。
Djangoはデータベース接続設定を次の順序で読み取ることに注意してください。
OPTIONS
NAME
,USER
,PASSWORD
,HOST
,PORT
- MySQLオプションファイル
DjangoをMySQLオプションファイルにポイントすることにより、 OPTIONS
この例のように設定すると、どの設定よりも優先されます NAME
設定。これは、オプションファイルの外部をポイントした場合にオプションファイルを上書きします。 OPTIONS
設定。
この時点で、ファイルを保存して閉じることができます。
次に、以下を実行して、移行の変更を確認します。
- python manage.py makemigrations
次に、実行します migrate
変更が確実に行われるようにするには、次のようにします。
- python manage.py migrate
変更が移行されたので、Django管理インターフェースに使用する管理ユーザーを作成できます。 でこれを行う createsuperuser
指図:
- python manage.py createsuperuser
ユーザーのユーザー名、メールアドレス、パスワードの入力を求められます。
この情報を入力したら、テストを可能にするためにファイアウォール設定の調整に進むことができます。
ステップ6—ファイアウォール設定の調整
Django Webアプリケーションをテストする前に、ファイアウォール設定が調整されていることを確認する必要があります。 変更することから始めます ufw
ポートへのアクセスを許可する設定 8000
:
- sudo ufw allow 8000
ステータスをチェックして、これらの権限設定が正常に更新されたことを確認します。
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
8000 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
8000 (v6) ALLOW Anywhere (v6)
これで、ファイアウォール設定が適切に調整され、次のステップで接続をテストできるようになりました。
ステップ7—アプリケーションへのMySQL接続をテストする
これで、Djangoの構成がMySQLサーバーを正しく検出することを確認できます。 これは、サーバーを実行することで実行できます。 失敗した場合は、接続が正しく機能していないことを意味します。 それ以外の場合、接続は有効です。
まず、次のディレクトリに移動します。
- cd ~/my_blog_app/blog/
そこから、次のコマンドを実行します。
- python manage.py runserver your-server-ip:8000
次のような出力が表示されます。
OutputPerforming 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/
、Webアプリケーションを表示し、正しく機能していることを確認します。
ページが上のスクリーンショットのように表示される場合、Djangoアプリケーションは期待どおりに機能しています。
アプリのテストが終了したら、を押します CTRL + C
停止するには runserver
指図。 これにより、プログラミング環境に戻ります。
Python環境を離れる準備ができたら、 deactivate
指図:
- deactivate
プログラミング環境を非アクティブ化すると、ターミナルコマンドプロンプトに戻ります。
結論
このチュートリアルでは、Djangoブログの最初の基盤を作成しました。 MySQLをインストール、構成し、Djangoバックエンドに接続しました。 また、アプリケーションにいくつかの重要な情報を追加しました settings.py
などのファイル TIME_ZONE
, ALLOWED_HOSTS
, import os
、およびDjangoアプリケーションをMySQLに接続するためのデータベースクレデンシャル。 また、テストがスムーズに行われるようにファイアウォール設定を調整しました。
これらの基本的な設定と構成が完了したので、Djangoアプリケーションでモデルの開発と移行の適用を開始できます。