サーチ…


備考

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.pyviews.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.pydjango-adminプロジェクト特有のバージョンで、そのプロジェクトで管理コマンドを実行することができます。たとえば、プロジェクトをローカルで実行するには、 python manage.py runserver使用します。プロジェクトはDjangoアプリで構成されています。

Djangoアプリケーションは、モデルファイル(デフォルトではmodels.py )と、アプリケーション固有のURLやビューなどのその他のファイルを含むPythonパッケージです。アプリケーションは、 django-admin startapp NAMEコマンドで作成できます(このコマンドはプロジェクトディレクトリ内から実行する必要があります)。アプリをプロジェクトの一部にするには、 settings.py INSTALLED_APPSリストにそのアプリが含まれている必要がありsettings.py 。あなたが標準的な構成を使用した場合、Djangoはのようなもの扱うプリインストールされ、それ自身のアプリケーションのいくつかのアプリケーションが付属して認証を 、あなたのために。アプリケーションは複数のDjangoプロジェクトで使用できます。

Django ORMmodels.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スクリプトPYTHONPATHDJANGO_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コマンドが基本的にフォルダとファイルの束を作成し、プロジェクトを実行するために必ずしもその構造体が必要というわけではないことに気付くでしょう。

  1. file.pyというfile.pyファイルを作成します。

  2. そのファイルに次のコードをコピーして貼り付けます。

     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)
    
  3. ターミナルに行き、このコマンドでpython file.py runserverコマンドを実行します。

  4. ブラウザを開き、 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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow