最初のDjangoアプリの作成、パート1 —Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/intro/tutorial01
移動先:案内検索

最初のDjangoアプリの作成、パート1

例を挙げて学びましょう。

このチュートリアル全体を通して、基本的な投票アプリケーションの作成について説明します。

これは2つの部分で構成されます。

  • 人々が投票を表示して投票できる公開サイト。
  • 投票を追加、変更、削除できる管理サイト。

Djangoがすでにインストールされていることを前提としています。 シェルプロンプトで次のコマンドを実行することで、Djangoがインストールされていることと、どのバージョンであるかを知ることができます($プレフィックスで示されます)。

Djangoがインストールされている場合は、インストールのバージョンが表示されます。 そうでない場合は、「djangoという名前のモジュールがありません」というエラーが表示されます。

このチュートリアルは、Python3.6以降をサポートするDjango3.2向けに書かれています。 Djangoのバージョンが一致しない場合は、このページの右下隅にあるバージョンスイッチャーを使用してDjangoのバージョンのチュートリアルを参照するか、Djangoを最新バージョンに更新できます。 古いバージョンのPythonを使用している場合は、どのPythonバージョンをDjangoで使用できますか?をチェックして、互換性のあるバージョンのDjangoを見つけてください。

古いバージョンのDjangoを削除して新しいバージョンをインストールする方法については、 Djangoのインストール方法を参照してください。

助けを得る場所:

このチュートリアルで問題が発生した場合は、FAQの Geting Help セクションにアクセスしてください。


プロジェクトの作成

Djangoを初めて使用する場合は、初期設定を行う必要があります。 つまり、Django project を確立するコードを自動生成する必要があります。これは、データベース構成、Django固有のオプション、アプリケーション固有の設定など、Djangoのインスタンスの設定のコレクションです。

コマンドラインから、cdをコードを保存するディレクトリに移動し、次のコマンドを実行します。

これにより、現在のディレクトリにmysiteディレクトリが作成されます。 動作しなかった場合は、 django-admin の実行に関する問題を参照してください。

ノート

組み込みのPythonまたはDjangoコンポーネントの後にプロジェクトに名前を付けることは避ける必要があります。 特に、これは、django(Django自体と競合する)やtest(組み込みのPythonパッケージと競合する)などの名前の使用を避ける必要があることを意味します。


このコードはどこにあるべきですか?

背景が(最新のフレームワークを使用しない)単純な古いPHPである場合は、おそらくWebサーバーのドキュメントルート(/var/wwwなどの場所)の下にコードを配置することに慣れているでしょう。 Djangoでは、そうしません。 このPythonコードをWebサーバーのドキュメントルート内に配置することはお勧めできません。Webを介して他のユーザーがコードを表示できる可能性があるためです。 それはセキュリティにとって良くありません。

/home/mycodeなど、ドキュメントルートの外部のディレクトリにコードを配置します。


:djadmin: `startproject` が作成したものを見てみましょう。

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

これらのファイルは次のとおりです。

  • 外側のmysite/ルートディレクトリは、プロジェクトのコンテナです。 その名前はDjangoには関係ありません。 名前は好きな名前に変更できます。
  • manage.py:このDjangoプロジェクトをさまざまな方法で操作できるコマンドラインユーティリティ。 django-adminとmanage.pymanage.pyに関するすべての詳細を読むことができます。
  • 内部のmysite/ディレクトリは、プロジェクトの実際のPythonパッケージです。 その名前は、その中の何かをインポートするために使用する必要があるPythonパッケージ名です(例: mysite.urls)。
  • mysite/__init__.py:このディレクトリをPythonパッケージと見なす必要があることをPythonに通知する空のファイル。 Pythonの初心者の場合は、公式のPythonドキュメントでパッケージの詳細をお読みください。
  • mysite/settings.py:このDjangoプロジェクトの設定/構成。 Django設定は、設定がどのように機能するかをすべて教えてくれます。
  • mysite/urls.py:このDjangoプロジェクトのURL宣言。 Djangoを利用したサイトの「目次」。 URLの詳細については、 URLディスパッチャーをご覧ください。
  • mysite/asgi.py:ASGI互換のWebサーバーがプロジェクトにサービスを提供するためのエントリポイント。 詳細については、 ASGI を使用して展開する方法を参照してください。
  • mysite/wsgi.py:プロジェクトにサービスを提供するためのWSGI互換Webサーバーのエントリポイント。 詳細については、 WSGI を使用して展開する方法を参照してください。


開発サーバー

Djangoプロジェクトが機能することを確認しましょう。 まだ行っていない場合は、外側のmysiteディレクトリに移動し、次のコマンドを実行します。

コマンドラインに次の出力が表示されます。

システムチェックの実行...  システムチェックで問題は特定されませんでした(0は無音)。  適用されていない移行があります。 適用されるまで、アプリが正しく機能しない場合があります。 'python manage.pymigrate'を実行してそれらを適用します。  2021年10月15日-15:50:53Djangoバージョン3.2、設定を使用' mysite.settings ' で開発サーバーを起動http://127.0.0.1:8000/CONTROLでサーバーを終了します-NS。

ノート

今のところ、適用されていないデータベースの移行に関する警告は無視してください。 データベースについてはまもなく扱います。


純粋にPythonで記述された軽量のWebサーバーであるDjango開発サーバーを起動しました。 これはDjangoに含まれているため、本番環境の準備が整うまで、Apacheなどの本番サーバーの構成に煩わされることなく迅速に開発できます。

ここで注意してください。本番環境に似た場所でこのサーバーを使用しないでください。 開発中の使用のみを目的としています。 (私たちは、Webサーバーではなく、Webフレームワークを作成するビジネスを行っています。)

サーバーが稼働しているので、Webブラウザーで http://127.0.0.1:8000/にアクセスします。 「おめでとうございます!」と表示されます。 ページ、ロケットが離陸します。 出来た!

ポートの変更

デフォルトでは、:djadmin: `runserver` コマンドは、ポート8000の内部IPで開発サーバーを起動します。

サーバーのポートを変更する場合は、コマンドライン引数として渡します。 たとえば、次のコマンドはポート8080でサーバーを起動します。

サーバーのIPを変更する場合は、ポートと一緒に渡します。 たとえば、利用可能なすべてのパブリックIPをリッスンするには(Vagrantを実行している場合、またはネットワーク上の他のコンピューターで作業を披露したい場合に便利です)、次を使用します。

0 は、 0.0.0.0 のショートカットです。 開発サーバーの完全なドキュメントは、:djadmin: `runserver` リファレンスにあります。


:djadmin: `runserver` の自動リロード

開発サーバーは、必要に応じてリクエストごとにPythonコードを自動的に再読み込みします。 コードの変更を有効にするためにサーバーを再起動する必要はありません。 ただし、ファイルの追加などの一部のアクションでは再起動がトリガーされないため、このような場合はサーバーを再起動する必要があります。


投票アプリの作成

これで、環境(「プロジェクト」)がセットアップされたので、作業を開始する準備が整いました。

Djangoで作成する各アプリケーションは、特定の規則に従ったPythonパッケージで構成されています。 Djangoには、アプリの基本的なディレクトリ構造を自動的に生成するユーティリティが付属しているため、ディレクトリの作成ではなく、コードの記述に集中できます。

プロジェクト対。 アプリ

プロジェクトとアプリの違いは何ですか? アプリは、何かを行うWebアプリケーションです。たとえば、ウェブログシステム、公開記録のデータベース、小さなポーリングアプリなどです。 プロジェクトは、特定のWebサイトの構成とアプリのコレクションです。 プロジェクトには複数のアプリを含めることができます。 アプリは複数のプロジェクトに含めることができます。


アプリは、 Pythonパスのどこにでも存在できます。 このチュートリアルでは、manage.pyファイルと同じディレクトリにポーリングアプリを作成して、mysiteのサブモジュールではなく独自のトップレベルモジュールとしてインポートできるようにします。

アプリを作成するには、manage.pyと同じディレクトリにいることを確認し、次のコマンドを入力します。

これにより、ディレクトリpollsが作成され、次のようにレイアウトされます。

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

このディレクトリ構造には、ポーリングアプリケーションが格納されます。


あなたの最初のビューを書く

最初のビューを書いてみましょう。 ファイルpolls/views.pyを開き、次のPythonコードをその中に入れます。

polls / views.py

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

これは、Djangoで可能な最も単純なビューです。 ビューを呼び出すには、ビューをURLにマップする必要があります。このためには、URLconfが必要です。

pollsディレクトリにURLconfを作成するには、urls.pyというファイルを作成します。 これで、アプリディレクトリは次のようになります。

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

polls/urls.pyファイルには、次のコードを含めます。

polls / urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

次のステップは、ルートURLconfをpolls.urlsモジュールに向けることです。 mysite/urls.pyで、django.urls.includeのインポートを追加し、 include()urlpatternsリストに挿入すると、次のようになります。

mysite / urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

include()関数を使用すると、他のURLconfを参照できます。 Djangoが include()を検出すると、その時点までに一致したURLの部分を切り取り、残りの文字列をインクルードされたURLconfに送信してさらに処理します。

include()の背後にある考え方は、URLを簡単にプラグアンドプレイできるようにすることです。 ポーリングは独自のURLconf(polls/urls.py)にあるため、「/ polls /」、「/ fun_polls /」、「/ content / polls /」、またはその他のパスルートの下に配置できます。 、アプリは引き続き機能します。

include()を使用する場合

他のURLパターンを含める場合は、常にinclude()を使用する必要があります。 admin.site.urlsはこれに対する唯一の例外です。


これで、indexビューがURLconfに配線されました。 次のコマンドで動作していることを確認します。

に移動 http:// localhost:8000 / polls / ブラウザに「」というテキストが表示されます。 こんにちは世界。 あなたは世論調査のインデックスにいます。 」で定義しましたindex見る。

ページが見つかりません?

ここでエラーページが表示された場合は、 http:// localhost:8000 / ではなく、 http:// localhost:8000 / polls / にアクセスしていることを確認してください。


path()関数には4つの引数が渡されます。2つは必須です:routeview、2つはオプションです:kwargsname ]。 この時点で、これらの議論が何のためにあるのかを検討する価値があります。

path()引数:route

routeは、URLパターンを含む文字列です。 リクエストを処理するとき、Djangoはurlpatternsの最初のパターンから開始し、リストを下に向かって進み、一致するものが見つかるまで、リクエストされたURLを各パターンと比較します。

パターンは、GETパラメーターとPOSTパラメーター、またはドメイン名を検索しません。 たとえば、https://www.example.com/myapp/へのリクエストでは、URLconfはmyapp/を検索します。 https://www.example.com/myapp/?page=3へのリクエストでは、URLconfはmyapp/も検索します。


path()引数:view

Djangoは一致するパターンを見つけると、最初の引数として HttpRequest オブジェクトを使用し、キーワード引数としてルートから「キャプチャされた」値を使用して、指定されたビュー関数を呼び出します。 この例を少し説明します。


path()引数:kwargs

任意のキーワード引数を辞書でターゲットビューに渡すことができます。 チュートリアルでは、Djangoのこの機能を使用しません。


path()引数:name

URLに名前を付けると、Djangoの他の場所から、特にテンプレート内から、明確にURLを参照できます。 この強力な機能を使用すると、1つのファイルに触れるだけで、プロジェクトのURLパターンにグローバルな変更を加えることができます。

基本的な要求と応答のフローに慣れたら、このチュートリアルのパート2 を読んで、データベースの操作を開始してください。