メモ帳

python, juliaで機械学習をやっていく

Django 2 のシンプルな開発環境構築手順

Djangoでwebアプリ開発をはじめるための簡素な手順をまとめます。新しいプロジェクトをはじめる度に開発環境構築に時間をかけるのは嫌ですよね。無駄な設定なしの手早い構築手順です。とりあえずwebアプリを作ってみたい、試したいという場合には十分な開発環境だと思います。 使用環境は、

です。Python 3とpipはインストールされているという前提で話を進めていきます。 また、今回は、vagrant仮想マシンを作っています。仮想マシンでなくても動きますが、意図しない依存関係を断ち切るために導入したほうがいいです。

仮想環境の作成

まずは仮想環境を作ります。仮想環境ごとに、異なるpythonのバージョンとパッケージを導入することができます。webアプリによって必要なバージョンとパッケージは違うので、新しくwebアプリ開発を始める度に仮想環境を作ることになります。 Python 3.3から導入されたvenvを使っていきます。(pythonのバージョンが低い場合はvirtualenvを使えば同じことができます)

$ mkdir myproject
$ cd myproject
$ python3 -m venv env

myprojectというディレクトリの中に仮想環境を作ります。envというディレクトリが作られていれば成功です。しかし、このままではまだ仮想環境の中に入れていません。以下のコマンドでアクティベートしてあげなければいけません。

$ . env/bin/activate
(env) $ 

(仮想環境のディレクトリ名) $ となれば仮想環境の中に入れています。 仮想環境から抜け出すときは以下のコマンドを打てばいいです。

(env) $ deactivate

では、pipを使ってdjangoを仮想環境にインストールしていきましょう。以下(env)は省略しますがアクティベートしています。

Djangoのインストール

本題であるDjangoをインストールしましょう。

$ pip install Django==2.0.3

今回はDjango 2.0をインストールします。好きなバージョンをインストールしてください。1.xと2.xでは仕様が大きく異なっています。2.xは新しいので、1.x版にしか対応していないパッケージはたくさんあります。前もって確認してから開発を始めることを強く薦めます。特に問題がない場合は2.xを使いましょう。=以降を省略すれば最新版がインストールされます。

プロジェクトを作ってみましょう。

$ django-admin.py startproject myproject ./

このようなディレクトリ構造になるはずです。

|--env
|  |-- ...
|--manage.py
|--myproject
|  |--__init__.py
|  |--settings.py
|  |--urls.py
|  |--wsgi.py

setting.pyを最小限いじります。ALLOWED_HOSTSは許可するホスト名を設定するところです。開発環境なので任意のホストからのアクセスを受け付けることにします。templatesはhtmlファイルのことです。保存場所のパスを設定しておきます。templatesディレクトリ以下に保存しておけば参照できるようになります。そして、日本語環境用に文字コードタイムゾーンを変更しています。最後にstaticファイル(cssjavascriptなどの静的ファイル)とmedia(画像など)のパスを設定します。staticやmediaディレクトリ以下に保存すれば参照できます。

ALLOWED_HOSTS = ['*']
...
TEMPLATES = [
    {
    ...
        'DIRS':  [os.path.join(BASE_DIR, 'templates')],
    ...
]
...
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'
...
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
...

urls.pyに以下の行を加えます。staticファイルとmediaファイルを参照するために必要です。ただし、開発環境限定です。本番環境ではコメントアウトしてください。

from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
    ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #only development env

これで設定は終わりです。試しにブラウザで確認してみましょう。

$ python manage.py runserver

これで開発用のサーバが立ち上がります。(あくまでも開発用のサーバなので本番では使わないでください)

Performing system checks...

System check identified no issues (0 silenced).

You have 14 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.

June 11, 2018 - 17:39:12
Django version 2.0.6, using settings 'myproject.settings'
Starting development server at http://[?????]
Quit the server with CONTROL-C.

migrationしろと言ってきますが、今は無視してかまいません。ブラウザでhttp://[?????]に行ってみてください。http://127.0.0.1:8000/になっていることが多いと思います。ご自身のターミナルに表示されたurlへとんでください。以下のようなページが表示されていれば無事成功です。 f:id:atelier-0213:20190415211906p:plain

本番環境や、より柔軟な開発のために

開発環境では設定しなくても問題ありませんが、いじる可能性が高い箇所がいくつかあります。

webサーバの設定

Djangoがあればwebアプリ開発はできます。しかし、データの送受信プロセスはwebサーバが担っています。つまり、開発したwebアプリをweb上で見れるようにするためにはwebサーバ用のソフトウェアが別途必要です。 webサーバソフトウェアはNginxとApacheの二強と言ってもいいでしょう。そこまで大差はないみたいですが、Nginxのほうがシンプルで速いみたいです。設定はOSに依存します。ここが一番ハマりやすいところだと思います。しかし、開発環境では気にする必要ありません。自分でサーバを構築する場合には調べてみてください。 レンタルサーバVPSに契約して本番環境にデプロイする際は本番環境のwebサーバの設定に応じてwsgi.pyをいじらなければならない場合があります。

データベースの設定

送られてきたデータ(アカウント情報や記事の内容など)を保存しておくところはデータベースと呼ばれています。MySQLPostgreSQLなどが有名です。当然データベースによって様々な特徴があります。webサーバと同様に、本番環境に応じて設定がかわります。setting.pyで設定できます。

以上でDjangoの手早い開発環境構築は終わりです。新たにプロジェクトを始めるときに設定を忘れてしまわないようにまとめました。 本番環境が決まっている場合はこの設定の後にwebサーバとデータベース用の設定を行わなければいけません。 しかし、とりあえずwebアプリを作ってみたい、試したいという場合には十分な設定ができていると思います。