前書き

Pythonで記述された無料のオープンソースWebフレームワークであるDjangoは、スケーラビリティ、再利用性、および迅速な開発を可能にします。

このチュートリアルでは、MySQLデータベースに接続するブログWebサイトの初期基盤を設定する方法を学習します。 これには、 `+ django-admin`を使用してブログWebアプリケーションのスケルトン構造を作成し、MySQLデータベースを作成してから、Webアプリケーションをデータベースに接続することが含まれます。

前提条件

このチュートリアルは、https://www.digitalocean.com/community/tutorial_series/django-development [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をインストールします。 まだインストールしていない場合は、https://www.digitalocean.com/community/tutorials/how-to-install-the-latest-mysql-on-ubuntu-16-04#step-に従ってください。 2-%E2%80%94-installing-mysql [「Ubuntu 16.04に最新のMySQLをインストールする方法」のステップ2]。これには、MySQLをインストールするためのコマンドが含まれています。

前提条件がインストールされ、Django開発環境がセットアップされたら、アプリの作成に進むことができます。

ステップ1-初期Djangoプロジェクトスケルトンを作成する

アプリケーションの基礎を築くために、 `+ django-admin`コマンドを使用してプロジェクトのスケルトンを生成する必要があります。 この生成されたプロジェクトは、ブログアプリの基盤になります。

最初に行う必要があるのは、ホームディレクトリに移動することです。これは、次のコマンドで実行できます。

cd ~

次に、現在のディレクトリの内容を一覧表示できます。

ls

このシリーズの最初からゼロから始めた場合、ディレクトリが1つあることに気付くでしょう。

Outputdjango-apps

これには、すべてが正しくインストールされたことを確認するために生成したスケルトンプロジェクトが含まれています。

これは単なるテストであるため、このディレクトリは必要ありません。 代わりに、ブログアプリ用の新しいディレクトリを作成します。 作成しているアプリにとって意味のあるディレクトリを呼び出します。 例として、「++」と呼びます。

mkdir

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

cd

次に、Python仮想環境を作成してアクティブ化します。

python3 -m venv
. env/bin/activate

次に、Djangoをインストールします。

pip install django

`+ my_blog_app +`ディレクトリで、次のコマンドを実行してプロジェクトを生成します:

django-admin startproject

`+ blog / +`ディレクトリに移動して、動作したことを確認します。

cd blog

前の `+ django-admin `コマンドを実行した後、 ` blog / `ディレクトリは現在のディレクトリ `〜/ my_blog_app / +`に作成されているはずです。

+ ls +`を実行して、必要なアイテムが作成されたことを確認します。 `+ blog`ディレクトリと + manage.py`ファイルが必要です:

Outputblog manage.py

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

ステップ2-設定の編集

スケルトンプロジェクトを生成したので、 `+ settings.py +`ファイルができました。

私たちのブログが私たちの地域に関連付けられた正確な時間を持つために、 `+ settings.py `ファイルを編集して、現在のタイムゾーンを使用するようにします。 このhttps://en.wikipedia.org/wiki/List_of_tz_database_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 = ''

USE_I18N = True
...

静的ファイルのパスを追加する必要があるため、ファイルを開いたままにします。 Django Webアプリケーションから提供されるファイルは、*静的ファイル*と呼ばれます。 これには、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/'

タイムゾーンと静的ファイルのパスを追加したので、次にIPを許可されたホストのリストに追加する必要があります。 + ALLOWED_HOSTS`と書かれている + settings.py`ファイルの行に移動すると、 `+ settings.py +`ファイルの上部に移動します。

settings.py

...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['']

# Application definition
...

サーバーのIPアドレスを角括弧と一重引用符の間に追加します。

行った変更に満足したら、「+ CTRL 」「+ X 」を押してファイルを保存し、次に「 y +」を押して変更を確認します。

適切なタイムゾーンが設定されるように、 `+ settings.py `ファイルを正常に編集しました。 また、静的ファイルのパスを追加し、「 ipアドレス」をアプリケーションの「+ ALLOWED_HOSTs」に設定します。

この時点で、データベース接続のセットアップに進むことができます。

手順3-MySQLデータベースコネクタのインストール

プロジェクトでMySQLを使用するには、Djangoと互換性のあるPython 3データベースコネクタライブラリが必要です。 そこで、 `+ MySQLdb `の分岐バージョンであるデータベースコネクタ ` mysqlclient +`をインストールします。

`+ mysqlclient `のドキュメントによると、「 ` MySQLdb `はPythonデータベースAPIを提供する一般的な ` MySQL `データベースサーバーへのスレッド互換インターフェイスです。」主な違いは ` mysqlclient +`に追加の利点があることですPython 3サポートを含む。

最初に行う必要があるのは、 `+ 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

PyPi `+ mysqlclient +`コネクタライブラリを使用して、MySQLサーバーとMySQLクライアントを正常にインストールしました。

手順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  -p

次に、このパスワードの入力を求める出力が表示されます。

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)

デフォルトでは、 + information_schema、` + MySQL`、 + performance_schema、および` + sys + `の4つのデータベースがすでに作成されています。 これらにはMySQLサーバー自体にとって重要な情報が含まれているため、これらに触れる必要はありません。

MySQLサーバーに正常にログインできたので、ブログのデータを保持する初期データベースを作成します。

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

CREATE DATABASE ;

データベースが正常に作成されると、次の出力が表示されます。

OutputQuery OK, 1 row affected (0.00 sec)

次に、使用可能なデータベースのリストにデータベースがリストされていることを確認します。

SHOW DATABASES;

`++`データベースは、出力に含まれるデータベースの1つであることがわかります。

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

ブログ用のMySQLデータベースが正常に作成されました。

MySQLサーバーを終了する場合はいつでも、 + CTRL + + `+ D +`を押します。

ステップ5-アプリケーションへのMySQLデータベース接続の追加

最後に、データベース接続認証情報をDjangoアプリケーションに追加します。

DjangoブログアプリをMySQLに接続するために必要な変更を加えましょう。

+ settings.py`ファイルに移動し、現在の + DATABASE IN`行を次の行に置き換えます。 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 =
user =
password =
default-character-set = utf8

この場合のデータベース名は「+」で、MySQLサーバーのユーザー名は作成したもので、パスワードは作成したMySQLサーバーのパスワードです。 また、 ` utf8 +`がデフォルトのエンコードとして設定されていることに気付くでしょう。これはMySQLでUnicodeデータをエンコードする一般的な方法です。

ファイルを編集したら、変更を有効にするためにMySQLを再起動する必要があります。

systemctl daemon-reload
systemctl restart mysql

MySQLの再起動には数秒かかるため、しばらくお待ちください。

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

Djangoの設定がMySQLサーバーを適切に検出することを確認する必要があります。 サーバーを実行するだけでこれを実行できます。 失敗した場合、接続が適切に機能していないことを意味します。 それ以外の場合、接続は有効です。

次のディレクトリに移動する必要があります。

cd ~/my_blog_app/blog/

そこから、次のコマンドを実行できます。

python manage.py runserver :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://:8000/
Quit the server with CONTROL-C.

出力からの指示に従い、提案されたリンク `+ http://:8000 / +`に従って、Webアプリケーションを表示し、適切に動作していることを確認します。

image:https://assets.digitalocean.com/articles/eng_python/django/django-2-testsite.png [Django Default Page]

ページが上記のスクリーンショットのように表示される場合、Djangoアプリケーションは期待どおりに機能しています。

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

Python環境を離れる準備ができたら、 `+ deactivate +`コマンドを実行できます:

deactivate

プログラミング環境を非アクティブ化すると、ターミナルコマンドプロンプトに戻ります。

結論

このチュートリアルでは、Djangoブログの最初の基礎を作成しました。 MySQLをインストールし、構成し、Djangoバックエンドに接続しました。 また、 `+ TIME_ZONE `や ` ALLOWED_HOSTS `など、アプリケーションの ` settings.py +`ファイルにいくつかの重要な情報を追加しました。

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