Django チュートリアル
Djangoを使い始める
サーチ…
備考
Djangoは、「デッドラインを持つ完璧主義者のためのWebフレームワーク」として宣伝しています。「Djangoにより、より迅速かつより少ないコードでより良いWebアプリケーションを構築することが容易になります。それはMVCアーキテクチャと見ることができます。そのコアには以下のものがあります:
- 開発とテストのための軽量でスタンドアロンのWebサーバー
- HTMLフォームとデータベースの格納に適した値を変換できるフォームのシリアライゼーションと検証システム
- オブジェクト指向プログラミングから借用された継承の概念を利用するテンプレートシステム
- リクエスト処理のさまざまな段階で介入してカスタム関数を実行できるミドルウェアクラスをサポートする、いくつかのキャッシュメソッドのいずれかを使用できるキャッシングフレームワーク
- アプリケーションのコンポーネントが事前定義された信号を介して相互にイベントを通信することを可能にする内部ディスパッチャシステム
- Django自身のコンポーネントをさまざまな言語に翻訳するなどの国際化システム
- DjangoモデルインスタンスのXMLおよび/またはJSON表現を生成して読み込むことができるシリアライゼーションシステム
- テンプレートエンジンの機能を拡張するためのシステム
- Pythonのユニットテストフレームワークに組み込まれたインタフェース
バージョン
バージョン | 発売日 |
---|---|
1.11 | 2017-04-04 |
1.10 | 2016-08-01 |
1.9 | 2015-12-01 |
1.8 | 2015-04-01 |
1.7 | 2014-09-02 |
1.6 | 2013-11-06 |
1.5 | 2013-02-26 |
1.4 | 2012-03-23 |
1.3 | 2011-03-23 |
1.2 | 2010-05-17 |
1.1 | 2009年7月29日 |
1.0 | 2008-09-03 |
プロジェクトの開始
DjangoはPythonに基づくWeb開発フレームワークです。 Djangoの1.11(最新の安定版リリース)がインストールされているのPython 2.7、3.4、3.5または3.6が必要です。 pip
が利用可能であると仮定すると、インストールは次のコマンドを実行するのと同じくらい簡単です。以下に示すバージョンを省略すると、djangoの最新バージョンがインストールされることに注意してください。
$ pip install django
特定のバージョンのdjangoをインストールするには、バージョンがdjango 1.10.5であると仮定して、次のコマンドを実行します。
$ pip install django==1.10.5
Djangoを使用して構築されたWebアプリケーションは、Djangoプロジェクト内に存在する必要があります。 django-admin
コマンドを使用して、現在のディレクトリで新しいプロジェクトを開始することができます:
$ django-admin startproject myproject
ここで、 myproject
はプロジェクトを一意に識別する名前で、 数字 、 文字 、およびアンダースコアで構成できます。
これにより、次のプロジェクト構造が作成されます。
myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
wsgi.py
アプリケーションを実行するには、開発サーバーを起動します
$ cd myproject
$ python manage.py runserver
サーバーが稼動しているので、Webブラウザでhttp://127.0.0.1:8000/
にアクセスしてください。次のページが表示されます。
デフォルトでは、 runserver
コマンドは、ポート8000
内部IP上で開発サーバーを開始します。このサーバーは、コードを変更すると自動的に再開します。しかし、新しいファイルを追加する場合は、手動でサーバーを再起動する必要があります。
サーバーのポートを変更する場合は、コマンドライン引数として渡します。
$ python manage.py runserver 8080
サーバーのIPを変更する場合は、ポートと一緒にそれを渡します。
$ python manage.py runserver 0.0.0.0:8000
runserver
はデバッグビルドとローカルテストのためのものです。特別なサーバープログラム(Apacheなど)は、常にプロダクションで使用する必要があります。
Djangoアプリケーションを追加する
Djangoプロジェクトには通常、複数のapps
が含まれていapps
。これは、プロジェクトを小規模で整備可能なモジュールに構造化する単なる方法です。アプリケーションを作成するには、あなたのプロジェクトフォルダ( manage.py
)に移動し、 startapp
コマンドを実行します(必要に応じてmyappを変更します)。
python manage.py startapp myapp
これにより、 myappフォルダといくつかの必要なファイル( models.py
とviews.py
など)が生成されます。
Djangoにmyappを認識させるために、 settings.py
それを追加してください:
# myproject/settings.py
# Application definition
INSTALLED_APPS = [
...
'myapp',
]
Djangoプロジェクトのフォルダ構造は好みに合わせて変更することができます。フォルダー名の繰り返しを避けるため、プロジェクトフォルダーの名前が/src
に変更されることがあります。典型的なフォルダ構造は次のようになります。
Djangoの概念
django-adminは、Djangoに付属しているコマンドラインツールです。 Djangoプロジェクトを始めて管理するための便利なコマンドがいくつか付属しています 。このコマンドは./manage.py
と同じですが、プロジェクトディレクトリにある必要はありません。 DJANGO_SETTINGS_MODULE
環境変数を設定する必要があります。
DjangoプロジェクトはDjango設定ファイルを含むPythonコードベースです。 Django管理者は、 django-admin startproject NAME
コマンドを使ってプロジェクトを作成することができます。プロジェクトには通常、トップレベルにmanage.py
というファイルがあり、 urls.py
というルートURLファイルがあります。 manage.py
はdjango-admin
プロジェクト特有のバージョンで、そのプロジェクトで管理コマンドを実行することができます。たとえば、プロジェクトをローカルで実行するには、 python manage.py runserver
使用します。プロジェクトはDjangoアプリで構成されています。
Djangoアプリケーションは、モデルファイル(デフォルトではmodels.py
)と、アプリケーション固有のURLやビューなどのその他のファイルを含むPythonパッケージです。アプリケーションは、 django-admin startapp NAME
コマンドで作成できます(このコマンドはプロジェクトディレクトリ内から実行する必要があります)。アプリをプロジェクトの一部にするには、 settings.py
INSTALLED_APPS
リストにそのアプリが含まれている必要がありsettings.py
。あなたが標準的な構成を使用した場合、Djangoはのようなもの扱うプリインストールされ、それ自身のアプリケーションのいくつかのアプリケーションが付属して認証を 、あなたのために。アプリケーションは複数のDjangoプロジェクトで使用できます。
Django ORMはmodels.py
で定義されたデータベースモデルをすべて収集し、それらのモデルクラスに基づいてデータベーステーブルを作成します。これを行うには、まず、 settings.py
DATABASES
設定を変更してデータベースをセットアップしsettings.py
。次に、 データベースモデルを定義したら、 python manage.py makemigrations
実行し、続いてpython manage.py migrate
を実行して、モデルに基づいてデータベースのスキーマを作成または更新します。
完全なこんにちは世界の例。
ステップ1すでにDjangoがインストールされている場合は、この手順をスキップできます。
pip install Django
ステップ2新しいプロジェクトを作成します
django-admin startproject hello
これにより、 hello
という名前のフォルダが作成され、次のファイルが作成されます。
hello/
├── hello/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
インサイドステップ3 hello
モジュール(含むフォルダ__init.py__
)ファイルを作成するには呼ばviews.py
:
hello/
├── hello/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── views.py <- here
│ └── wsgi.py
└── manage.py
次の内容を記入してください:
from django.http import HttpResponse
def hello(request):
return HttpResponse('Hello, World')
これはビュー機能と呼ばれます。
ステップ4 hello/urls.py
を次のように編集します。
from django.conf.urls import url
from django.contrib import admin
from hello import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.hello)
]
ビュー関数hello()
をURLにリンクします。
ステップ5サーバを起動します。
python manage.py runserver
ステップ6
ブラウザーでhttp://localhost:8000/
を参照すると、以下が表示されます。
こんにちは世界
仮想環境
厳密には必須ではありませんが、プロジェクトを「仮想環境」で開始することを強くお勧めします。仮想環境とは、特定のバージョンのPythonと一連のモジュール(依存関係)を保持し、オペレーティングシステムのネイティブPythonや他のプロジェクトと同じコンピュータ上で干渉しないコンテナ (ディレクトリ)です。
作業中のプロジェクトごとに異なる仮想環境を設定することで、さまざまなバージョンのPythonでさまざまなDjangoプロジェクトを実行でき、矛盾することなく独自の依存関係を維持できます。
Python 3.3以降
Python 3.3以降には、標準のvenv
モジュールが含まれています。通常、これはpyvenv
として呼び出すことができます。 pyvenv
コマンドが利用できない環境では、 python3 -m venv
としてモジュールを直接呼び出すことで同じ機能にアクセスできます。
仮想環境を作成するには:
$ pyvenv <env-folder>
# Or, if pyvenv is not available
$ python3 -m venv <env-folder>
Python 2
Python 2を使用している場合は、最初にpipから別のモジュールとしてインストールできます。
$ pip install virtualenv
代わりにvirtualenv
コマンドを使用して環境を作成します。
$ virtualenv <env-folder>
有効化(任意のバージョン)
仮想環境が設定されました。それを使用するには、使用する端末で有効にする必要があります。
仮想環境(任意のPythonバージョン)を '有効にする'には、
Linuxのような:
$ source <env-folder>/bin/activate
Windowsのような:
<env-folder>\Scripts\activate.bat
これにより、仮想環境がアクティブであることを示すプロンプトが変更されます。 (<env-folder>) $
これ以降、 pip
を使用してインストールされたものは、システム全体ではなく仮想envフォルダにインストールされます。
仮想環境のままにするには、 deactivate
:
(<env-folder>) $ deactivate
代わりに:virtualenvwrapperを使う
virtualenvwrapperを使って、virtualenvの作成とアクティベーションを非常に便利にしたり、コードから分離したりすることも考えられます:
# Create a virtualenv
mkvirtualenv my_virtualenv
# Activate a virtualenv
workon my_virtualenv
# Deactivate the current virtualenv
deactivate
代わりに:pyenv + pyenv-viritualenv
複数のPythonバージョンを扱う必要がある環境では、virtualenvとpyenv-virtualenvの恩恵を受けることができます。
# Create a virtualenv for specific Python version
pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
# Create a vritualenv for active python verion
pyenv virtualenv venv34
# Activate, deactivate virtualenv
pyenv activate <name>
pyenv deactivate
virtualenvsを使用する場合は、 postactivate
スクリプトでPYTHONPATH
とDJANGO_SETTINGS_MODULE
を設定すると便利です。
#!/bin/sh
# This hook is sourced after this virtualenv is activated
# Set PYTHONPATH to isolate the virtualenv so that only modules installed
# in the virtualenv are available
export PYTHONPATH="/home/me/path/to/your/project_root:$VIRTUAL_ENV/lib/python3.4"
# Set DJANGO_SETTINGS_MODULE if you don't use the default `myproject.settings`
# or if you use `django-admin` rather than `manage.py`
export DJANGO_SETTINGS_MODULE="myproject.settings.dev"
プロジェクトパスを設定する
プロジェクトパスをベース<env-folder>
ある特別な.project
ファイルの中に設定することもしばしば役に立ちます。これを行うと、仮想環境をアクティブにするたびにアクティブディレクトリが指定されたパスに変更されます。
<env-folder>/.project
という名前の新しいファイルを作成します。ファイルの内容は、プロジェクトディレクトリのパスにする必要があります。
/path/to/project/directory
次に、仮想環境を開始します( source <env-folder>/bin/activate
またはworkon my_virtualenv
を使用します)。端末は/path/to/project/directory
ます。
単一ファイルのHello Worldの例
この例は、DjangoでHello Worldページを作成するための最小限の方法を示しています。これは、 django-admin startproject example
コマンドが基本的にフォルダとファイルの束を作成し、プロジェクトを実行するために必ずしもその構造体が必要というわけではないことに気付くでしょう。
file.py
というfile.py
ファイルを作成します。そのファイルに次のコードをコピーして貼り付けます。
import sys from django.conf import settings settings.configure( DEBUG=True, SECRET_KEY='thisisthesecretkey', ROOT_URLCONF=__name__, MIDDLEWARE_CLASSES=( 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ), ) from django.conf.urls import url from django.http import HttpResponse # Your code goes below this line. def index(request): return HttpResponse('Hello, World!') urlpatterns = [ url(r'^$', index), ] # Your code goes above this line if __name__ == "__main__": from django.core.management import execute_from_command_line execute_from_command_line(sys.argv)
ターミナルに行き、このコマンドで
python file.py runserver
コマンドを実行します。ブラウザを開き、 127.0.0.1:8000に進みます。
Dockerをサポートするデプロイに適したプロジェクト。
デフォルトのDjangoプロジェクトテンプレートはうまくいきますが、コードをデプロイするとdevopがプロジェクトに手を置くなどしてしまいます。あなたができることは、あなたのリポジトリに存在する必要がある残りのものとソースコードを分けることです。
GitHub上で使用可能なDjangoプロジェクトテンプレートを見つけることができます。
プロジェクトの構造
PROJECT_ROOT
├── devel.dockerfile
├── docker-compose.yml
├── nginx
│ └── project_name.conf
├── README.md
├── setup.py
└── src
├── manage.py
└── project_name
├── __init__.py
└── service
├── __init__.py
├── settings
│ ├── common.py
│ ├── development.py
│ ├── __init__.py
│ └── staging.py
├── urls.py
└── wsgi.py
私は維持したいservice
名前のディレクトリservice
、私は同じ使用できるように、すべてのプロジェクトのおかげためDockerfile
すべての私のプロジェクトで。要件と設定の分割は、すでにここで十分に文書化されています。
複数の要件ファイルの使用
複数の設定を使用する
ドッカーファイル
開発者だけがDockerを使用するという前提で(すべての開発者が最近信頼しているわけではありません)。これは、 devel.dockerfile
環境devel.dockerfile
である可能性があります:
FROM python:2.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /run/service
ADD . /run/service
WORKDIR /run/service
RUN pip install -U pip
RUN pip install -I -e .[develop] --process-dependency-links
WORKDIR /run/service/src
ENTRYPOINT ["python", "manage.py"]
CMD ["runserver", "0.0.0.0:8000"]
要件の追加だけでビルド中のDockerキャッシュが活用されます。要件の変更を再構築するだけで済みます。
作成する
Dockerの作成は、特にローカルで実行する複数のサービスがある場合に便利です。 docker-compose.yml
:
version: '2'
services:
web:
build:
context: .
dockerfile: devel.dockerfile
volumes:
- "./src/{{ project_name }}:/run/service/src/{{ project_name }}"
- "./media:/run/service/media"
ports:
- "8000:8000"
depends_on:
- db
db:
image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE={{ project_name }}
nginx:
image: nginx
ports:
- "80:80"
volumes:
- "./nginx:/etc/nginx/conf.d"
- "./media:/var/media"
depends_on:
- web
Nginx
あなたの開発環境は可能な限り環境に近いものでなければならないので、最初からNginxを使いたいと思っています。次に、nginxの設定ファイルの例を示します。
server {
listen 80;
client_max_body_size 4G;
keepalive_timeout 5;
location /media/ {
autoindex on;
alias /var/media/;
}
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_pass http://web:8000/;
}
}
使用法
$ cd PROJECT_ROOT
$ docker-compose build web # build the image - first-time and after requirements change
$ docker-compose up # to run the project
$ docker-compose run --rm --service-ports --no-deps # to run the project - and be able to use PDB
$ docker-compose run --rm --no-deps <management_command> # to use other than runserver commands, like makemigrations
$ docker exec -ti web bash # For accessing django container shell, using it you will be inside /run/service directory, where you can run ./manage shell, or other stuff
$ docker-compose start # Starting docker containers
$ docker-compose stop # Stopping docker containers