前書き
Pythonで記述された無料のオープンソースWebフレームワークであるDjangoは、スケーラビリティ、再利用性、および迅速な開発を可能にします。
このチュートリアルでは、MySQLデータベースに接続するブログWebサイトの初期基盤を設定する方法を学習します。 これには、django-admin
を使用してブログWebアプリケーションのスケルトン構造を作成し、MySQLデータベースを作成してから、Webアプリケーションをデータベースに接続することが含まれます。
前提条件
このチュートリアルは、Django Developmentシリーズの2番目のチュートリアルです。 このチュートリアルを実行するには、次を完了する必要があります。
-
Ubuntu 16.04サーバーでDjangoを使用するために必要なソフトウェアをインストールします。 sudo特権でサーバーをセットアップしていない場合、またはDjangoをまだインストールしていない場合は、このシリーズの最初のチュートリアル「https://www.digitalocean.com/community/tutorials/how-to-install」に従ってください。 -django-and-set-up-a-development-environment-on-ubuntu-16-04 [Djangoをインストールし、Ubuntu 16.04で開発環境をセットアップする方法]
-
このチュートリアルを進める前にMySQLをインストールします。 まだインストールしていない場合は、step 2 of “How To Install the Latest MySQL on Ubuntu 16.04”に従うことができます。これには、MySQLをインストールするためのコマンドが含まれています。
前提条件がインストールされ、Django開発環境がセットアップされたら、アプリの作成に進むことができます。
[[step-1 -—- create-the-initial-django-project-skeleton]] ==ステップ1—初期のDjangoプロジェクトスケルトンを作成します
アプリケーションの基礎を築くには、django-admin
コマンドを使用してプロジェクトスケルトンを生成する必要があります。 この生成されたプロジェクトは、ブログアプリの基盤になります。
最初に行う必要があるのは、ホームディレクトリに移動することです。これは、次のコマンドで実行できます。
cd ~
次に、現在のディレクトリの内容を一覧表示できます。
ls
このシリーズの最初からゼロから始めた場合、ディレクトリが1つあることに気付くでしょう。
Outputdjango-apps
これには、すべてが正しくインストールされたことを確認するために生成したスケルトンプロジェクトが含まれています。
これは単なるテストであるため、このディレクトリは必要ありません。 代わりに、ブログアプリ用の新しいディレクトリを作成します。 作成しているアプリにとって意味のあるディレクトリを呼び出します。 例として、my_blog_app
と呼びます。
mkdir my_blog_app
次に、新しく作成したディレクトリに移動します。
cd my_blog_app
次に、Python仮想環境を作成してアクティブ化します。
python3 -m venv env
. env/bin/activate
次に、Djangoをインストールします。
pip install django
my_blog_app
ディレクトリにいる間に、次のコマンドを実行してプロジェクトを生成します。
django-admin startproject blog
blog/
ディレクトリに移動して、機能することを確認します。
cd blog
blog/
ディレクトリは、前のdjango-admin
コマンドを実行した後、現在のディレクトリ~/my_blog_app/
に作成されているはずです。
ls
を実行して、必要なアイテムが作成されたことを確認します。 blog
ディレクトリとmanage.py
ファイルが必要です。
Outputblog manage.py
ブログアプリケーションの最初の開始を含むプロジェクトディレクトリを作成したので、次のステップに進みます。
[[step-2 -—- edit-settings]] ==ステップ2—設定の編集
スケルトンプロジェクトを生成したので、settings.py
ファイルができました。
ブログでエリアに正しい時刻を関連付けるために、settings.py
ファイルを編集して、現在のタイムゾーンを使用するようにします。 このlist of time zonesを参照として使用できます。 この例では、America/New_York
時間を使用します。
次に、settings.py
ファイルが配置されているディレクトリに移動します。
cd ~/my_blog_app/blog/blog/
次に、nanoまたは選択したテキストエディタを使用して、settings.py
ファイルを開いて編集します。
nano settings.py
TIME_ZONE
フィールドを編集しているので、次のようなファイルの下部セクションに移動します。
settings.py
...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
...
TIME_ZONE
行を変更して、現在のタイムゾーンに設定します。 この例では、ニューヨークのタイムゾーンを使用します。
settings.py
...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'America/New_York'
USE_I18N = True
...
静的ファイルのパスを追加する必要があるため、ファイルを開いたままにします。 Django Webアプリケーションから提供されるファイルは、static filesと呼ばれます。 これには、JavaScript、CSS、画像など、完全なWebページをレンダリングするために必要なファイルが含まれます。
以下に示すように、settings.py
ファイルの最後に移動し、STATIC_ROOT
を追加します。
settings.py
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
タイムゾーンと静的ファイルのパスを追加したので、次に許可されたホストのリストにIPを追加する必要があります。 ALLOWED_HOSTS
と表示されているsettings.py
ファイルの行に移動します。これは、settings.py
ファイルの先頭に向かって表示されます。
settings.py
...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ['your server IP address']
# Application definition
...
サーバーのIPアドレスを角括弧と一重引用符の間に追加します。
行った変更に問題がなければ、CTRL
+X
、次にy
を押してファイルを保存し、変更を確認します。
これで、settings.py
ファイルが正常に編集され、適切なタイムゾーンが構成されました。 また、静的ファイルのパスを追加し、ip address
をアプリケーションのALLOWED_HOST
に設定しました。
この時点で、データベース接続のセットアップに進むことができます。
[[step-3 -—- install-mysql-database-connector]] ==ステップ3—MySQLデータベースコネクタをインストールします
プロジェクトでMySQLを使用するには、Djangoと互換性のあるPython 3データベースコネクタライブラリが必要です。 そこで、MySQLdb
のフォークバージョンであるデータベースコネクタmysqlclient
をインストールします。
mysqlclient
のドキュメントによると、「MySQLdb
は、PythonデータベースAPIを提供する人気のあるMySQL
データベースサーバーへのスレッド互換インターフェイスです。」主な違いは、mysqlclient
にはPython3サポートを含めるという追加の利点があることです。
最初に行う必要があるのは、python3-dev
をインストールすることです。 次のコマンドを実行して、python3-dev
をインストールできます。
sudo apt-get install python3-dev
python3-dev
をインストールしたら、必要なPythonおよびMySQL開発ヘッダーとライブラリをインストールできます。
sudo apt-get install python3-dev libmysqlclient-dev
次の出力が表示されたら:
OutputAfter this operation, 11.9 MB of additional disk space will be used.
Do you want to continue? [Y/n]
y
と入力し、ENTER
を押して続行します。
次に、pip3
を使用して、PyPi
からmysqlclient
ライブラリをインストールします。 pip
のバージョンはpip3
を指しているので、pip
を使用できます。
pip install mysqlclient
次のような出力が表示され、適切にインストールされていることが確認されます。
successfully installed mysqlclientCollecting mysqlclient
Downloading mysqlclient-1.3.12.tar.gz (82kB)
100% |████████████████████████████████| 92kB 6.7MB/s
Building wheels for collected packages: mysqlclient
Running setup.py bdist_wheel for mysqlclient ... done
Stored in directory: /root/.cache/pip/wheels/32/50/86/c7be3383279812efb2378c7b393567569a8ab1307c75d40c5a
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.12
次に、次のコマンドを使用して、MySQL
サーバーをインストールします。
sudo apt-get install mysql-server
これで、PyPimysqlclient
コネクタライブラリを使用してMySQLサーバーとMySQLクライアントが正常にインストールされました。
[[step-4 -—- create-the-database]] ==ステップ4—データベースを作成します
Djangoアプリケーションのスケルトンがセットアップされ、mysqlclient
とmysql-server
がインストールされたので、MySQLとの互換性のためにDjangoバックエンドを構成する必要があります。
MySQLサービスが実行されていることを確認します。
systemctl status mysql.service
次のような出力が表示されます。
mysql.service active● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-12-29 11:59:33 UTC; 1min 44s ago
Main PID: 26525 (mysqld)
CGroup: /system.slice/mysql.service
└─26525 /usr/sbin/mysqld
Dec 29 11:59:32 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Starting MySQL Community Server...
Dec 29 11:59:33 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Started MySQL Community Server.
代わりに次のような出力が表示される場合:
mysql.service inactive● mysqld.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
sudo systemctl start mysql
を実行して、mysql.service
を再開できます。
これで、次のコマンドを使用してMySQL資格情報でログインできます。 ここで、-u
はユーザー名を宣言するためのフラグであり、-p
はこのユーザーにパスワードが必要であることをMySQLに通知するフラグです。
mysql -u db_user -p
次に、このdb_user’sパスワードを要求する出力が表示されます。
OutputEnter password:
パスワードを正しく入力すると、次の出力が表示されます。
OutputWelcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
次のコマンドを使用して、MySQLに現在のデータベースを表示させることができます。
SHOW DATABASES;
データベースがまだ作成されていない場合、次のような出力が表示されます。
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
[.note]#Note:接続しようとしたときにエラーが発生した場合は、パスワードが正しいことと、MySQLが正しくインストールされていることを確認してください。 それ以外の場合は、tutorial on how to install and configure MySQL。
#に再度アクセスしてください。
デフォルトでは、information_schema
、MySQL
、performance_schema
、およびsys
の4つのデータベースがすでに作成されています。 これらにはMySQLサーバー自体にとって重要な情報が含まれているため、これらに触れる必要はありません。
MySQLサーバーに正常にログインできたので、ブログのデータを保持する初期データベースを作成します。
MySQLでデータベースを作成するには、データベースに意味のある名前を使用して次のコマンドを実行します。
CREATE DATABASE blog_data;
データベースが正常に作成されると、次の出力が表示されます。
OutputQuery OK, 1 row affected (0.00 sec)
[。注意]##
Note:次の出力が表示された場合:
database creation failedERROR 1007 (HY000): Can't create database blog_data; database exists
次に、エラーが示すように、blog_data
という名前のデータベースがすでに存在します。
また、次のMySQLエラーが表示される場合、MySQL構文エラーがあることを意味します。 このチュートリアルに示されているとおりにコマンドを入力したことを確認します。
database creation failedERROR 1064 (42000): You have an error in your SQL syntax;
次に、使用可能なデータベースのリストにデータベースがリストされていることを確認します。
SHOW DATABASES;
blog_data
データベースが出力に含まれるデータベースの中にあることがわかります。
output+--------------------+
| Database |
+--------------------+
| information_schema |
| blog_data |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
ブログ用のMySQLデータベースが正常に作成されました。
MySQLサーバーを終了するときはいつでも、CTRL
+D
を押してください。
[[step-5 --- add-the-mysql-database-connection-to-your-application]] ==ステップ5—MySQLデータベース接続をアプリケーションに追加します
最後に、データベース接続認証情報をDjangoアプリケーションに追加します。
[.note]#Note: Djangoのドキュメントによると、接続設定は次の順序で使用されることに注意してください:
-OPTIONS
-NAME
、USER
、PASSWORD
、HOST
、PORT
-MySQL option files.
#
DjangoブログアプリをMySQLに接続するために必要な変更を加えましょう。
settings.py
ファイルに移動し、現在のDATABASES
行を次のように置き換えます。 MySQLをデータベースバックエンドとして使用し、どのファイルからデータベース接続認証情報を読み取るかを認識できるように、データベースディクショナリを構成します。
settings.py
...
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/etc/mysql/my.cnf',
},
}
}
...
次に、設定ファイルを編集して、MySQL資格情報を取得します。 nanoをsudo
として使用してファイルを編集し、次の情報を追加します。
sudo nano /etc/mysql/my.cnf
my.cnf
...
[client]
database = db_name
user = db_user
password = db_password
default-character-set = utf8
この場合のデータベース名がblog_data
の場合、MySQLサーバーのユーザー名は作成したものであり、パスワードは作成したMySQLサーバーのパスワードです。 また、utf8
がデフォルトのエンコーディングとして設定されていることに気付くでしょう。これは、MySQLでUnicodeデータをエンコードする一般的な方法です。
ファイルを編集したら、変更を有効にするためにMySQLを再起動する必要があります。
systemctl daemon-reload
systemctl restart mysql
MySQLの再起動には数秒かかるため、しばらくお待ちください。
[[step-6 -—- test-mysql-connection-to-application]] ==ステップ6—アプリケーションへの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).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 4, 2018 - 15:45:39
Django version 2.0.1, using settings 'blog.settings'
Starting development server at http://your-server-ip:8000/
Quit the server with CONTROL-C.
[.note]#Note:出力に未適用の移行があることがわかります。 ただし、心配しないでください。これについては、今後のチュートリアルで説明します。 これは、アプリケーションの初期設定には影響しません。 続けてください。
#
出力の指示に従い、推奨リンクhttp://your-server-ip:8000/
に従って、Webアプリケーションを表示し、正しく機能していることを確認します。
ページが上記のスクリーンショットのように表示される場合、Djangoアプリケーションは期待どおりに機能しています。
アプリのテストが終了したら、CTRL
+C
を押してrunserver
コマンドを停止できます。 これにより、プログラミング環境に戻ります。
Python環境を終了する準備ができたら、deactivate
コマンドを実行できます。
deactivate
プログラミング環境を非アクティブ化すると、ターミナルコマンドプロンプトに戻ります。
結論
このチュートリアルでは、Djangoブログの最初の基礎を作成しました。 MySQLをインストールし、構成し、Djangoバックエンドに接続しました。 また、TIME_ZONE
やALLOWED_HOSTS
など、アプリケーションのsettings.py
ファイルにいくつかの重要な情報を追加しました。
これらの基本設定と構成が完了したので、Djangoアプリケーションでモデルの開発と移行の適用を開始できます。