DjangoでWebアプリケーションの作成をしてみます。
まず実施事項として「djangoのインストール」、「プロジェクトの作成」、「アプリの作成」、「データベースの変更」といったところを実施して見ます。
インストールする OS は ubuntu-18.04 を使っています。
djangのインストール
まずはpythonのバージョンの確認です。
こちらは3.6系を利用しています。
1 2 3 4 |
$ python -V Python 3.6.6 |
次に、djangoのインストールです。
1 2 3 4 5 6 7 8 9 10 11 |
$ pip install django Collecting django Downloading https://files.pythonhosted.org/packages/ca/7e/fc068d164b32552ae3a8f8d5d0280c083f2e8d553e71ecacc21927564561/Django-2.1.1-py3-none-any.whl (7.3MB) 100% |████████████████████████████████| 7.3MB 4.3MB/s Collecting pytz (from django) Downloading https://files.pythonhosted.org/packages/30/4e/27c34b62430286c6d59177a0842ed90dc789ce5d1ed740887653b898779a/pytz-2018.5-py2.py3-none-any.whl (510kB) 100% |████████████████████████████████| 512kB 13.5MB/s Installing collected packages: pytz, django Successfully installed django-2.1.1 pytz-2018.5 |
ここではDjangoの2.1.1がインストールされました。
プロジェクトの作成
djangoのプロジェクトの作成は「django-admin.py」というコマンドユーティリティーで行います。
プロジェクトの雛形を作成することができます。
1 2 3 |
$ django-admin startproject <プロジェクト名> [<ディレクトリ>] |
ディレクトリ名を指定しないとプロジェクト名と同じディレクトリが作成され、その下にプロジェクト名と同じ名前で設定ディレクトリが作成されます。
ただ、設定ファイルがこちらに入っているとややこしいので、ベースディレクトリ名と設定ディレクトリ名を分けて作成いたします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ mkdir job_project $ cd job_project $ django-admin startproject config . $ tree . ├── config │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py |
これで設定ファイルを「config」としたプロジェクトが作成されました。
設定ファイルとしては以下になります。
settings.py | プロジェクトの設定情報を記載している |
urls.py | URLパターンとビューのマッチング情報を記載 ルーティングファイル |
wsgi.py | WebbサーバからWSGIインターフェースでDjangoサイトをに接続するための設定を記載 |
アプリの作成
アプリの作成は「manage.py」というコマンドユーティリティーで行います。
このユーティリティーは開発・運用などでしばしば使います。
以下では「job」というアプリを作成しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ python manage.py startapp job $ cd job $ tree . ├── admin.py ├── apps.py ├── __init__.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py └── views.py 1 directory, 7 files $ cd .. |
作成されたファイルとディレクトリの構成は以下になります。
admin.py | 管理サイトに関することを記述 |
apps.py | アプリケーションを識別するための設定を記述 |
migrations | マイグレーションファイルが作成されるディレクトリ |
models.py | DBなどの構造を表すModelに関する定義やビジネスロジックを記述 |
tests.py | テストに関することを記述 |
views.py | ビューに関することを記述 |
さて、プロジェクトの設定ファイルにアプリを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ vi config/settings.py ----------------------------- INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'job.apps.JobConfig', # 追加 ] ----------------------------- |
これは「job/apps.py」に記載されたクラス名を記述します。
1 2 3 4 5 6 7 |
from django.apps import AppConfig class JobConfig(AppConfig): name = 'job' |
データベースの変更
次にDatabaseをデフォルトのSQLiteからMariaDBに変更するための設定を行います。
MariaDBのインストールは以下で実施しています。
https://colabmix.co.jp/tech-blog/ubuntu-18-04-mariadb-install/
まず、「config/settings.py」の設定を行います。
初期では以下となっている項目を。
1 2 3 4 5 6 7 8 |
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } |
以下のように変更します。
1 2 3 4 5 6 7 8 9 10 11 12 |
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'my_app', 'USER': 'app_user', 'PASSWORD': 'app_passwd', 'HOST': 'localhost', 'PORT': '3306', } } |
データベースでは「MySQL」、「PostgreSQL」、「SQLite」、「Oracle」の4つが設定可能です。
次にpipでmysqlのドライバーをインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ pip install mysqlclient Collecting mysqlclient Downloading https://files.pythonhosted.org/packages/ec/fd/83329b9d3e14f7344d1cb31f128e6dbba70c5975c9e57896815dbb1988ad/mysqlclient-1.3.13.tar.gz (90kB) 100% |████████████████████████████████| 92kB 4.7MB/s Complete output from command python setup.py egg_info: /bin/sh: 1: mysql_config: not found Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-install-hly7j47h/mysqlclient/setup.py", line 18, in <module> metadata, options = get_config() File "/tmp/pip-install-hly7j47h/mysqlclient/setup_posix.py", line 53, in get_config libs = mysql_config("libs_r") File "/tmp/pip-install-hly7j47h/mysqlclient/setup_posix.py", line 28, in mysql_config raise EnvironmentError("%s not found" % (mysql_config.path,)) OSError: mysql_config not found ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-hly7j47h/mysqlclient/ You are using pip version 10.0.1, however version 18.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command. |
MariaDBを使っているので「mysql_config」がないとエラーが出てしまいました。
そこで、以下のライブラリを導入します。
1 2 3 |
$ sudo apt-get install -y libmysqlclient-dev |
気を取り直して再度インストール。
1 2 3 |
$ pip install mysqlclient |
無事入りました。
ここで一旦、MariaDBを利用して接続できているかの確認を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ python manage.py runserver Performing system checks... System check identified no issues (0 silenced). You have 15 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. September 12, 2018 - 14:47:40 Django version 2.1.1, using settings 'config.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. |
無事、接続できました。
今回はここまでで、モデルの作成から実際に接続できるところまでを次回に行なっていきます。
【関連記事】
・DjangoでWebアプリケーションを作成してみる その2(ubuntu18.04、python3.6)
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。