Visual Studio Code での Django チュートリアル
Django は、迅速で安全、かつスケーラブルな Web 開発のために設計された高レベルの Python フレームワークです。Django には、URL ルーティング、ページテンプレート、およびデータ操作のための豊富なサポートが含まれています。
この Django チュートリアルでは、共通のベーステンプレートを使用する 3 つのページを持つシンプルな Django アプリを作成します。VS Code ターミナル、エディター、デバッガーで Django を操作する方法を理解するために、Visual Studio Code のコンテキストでこのアプリを作成します。このチュートリアルでは、データモデルの操作や管理インターフェースの作成など、Django 自体のさまざまな詳細については説明しません。これらの側面に関するガイダンスについては、このチュートリアルの最後にある Django ドキュメントのリンクを参照してください。
この Django チュートリアルで完成したコードプロジェクトは GitHub で見つけることができます: python-sample-vscode-django-tutorial。
問題が発生した場合は、Python 拡張機能 Discussions Q&A で回答を検索したり、質問したりできます。
前提条件
この Django チュートリアルを正常に完了するには、次のことを行う必要があります (これは、一般的な Python チュートリアル と同じ手順です)
-
Python 拡張機能 をインストールします。
-
Python 3 のバージョン (このチュートリアルが書かれているバージョン) をインストールします。オプションは次のとおりです
- (すべてのオペレーティングシステム) python.org からダウンロードします。通常は、ページに最初に表示される Download Python 3.9.1 ボタン (または最新バージョン) を使用します。
- (Linux) 組み込みの Python 3 インストールで問題なく動作しますが、他の Python パッケージをインストールするには、ターミナルで
sudo apt install python3-pipを実行する必要があります。 - (macOS)
brew install python3を使用して macOS の Homebrew 経由でインストールします (macOS のシステムインストール Python はサポートされていません)。 - (すべてのオペレーティング システム) Anaconda からダウンロードします (データ サイエンス目的)。
-
Windows では、Python インタープリターの場所が PATH 環境変数に含まれていることを確認してください。コマンド プロンプトで
pathを実行して場所を確認できます。Python インタープリターのフォルダーが含まれていない場合は、Windows 設定を開き、「環境」を検索し、アカウントの環境変数を編集 を選択し、Path 変数を編集してそのフォルダーを含めます。
Django チュートリアルのプロジェクト環境を作成する
このセクションでは、Django がインストールされる仮想環境を作成します。仮想環境を使用することで、Django がグローバルな Python 環境にインストールされるのを防ぎ、アプリケーションで使用されるライブラリを正確に制御できます。仮想環境を使用すると、環境の requirements.txt ファイルを作成 するのも簡単になります。
-
ファイルシステムに、
hello_djangoのような、このチュートリアル用のプロジェクトフォルダーを作成します。 -
そのフォルダー内で、現在のインタープリターに基づいて
.venvという名前の仮想環境を作成するために、次のコマンド (コンピューターに適したコマンド) を使用します。# Linux sudo apt-get install python3-venv # If needed python3 -m venv .venv source .venv/bin/activate # macOS python3 -m venv .venv source .venv/bin/activate # Windows py -3 -m venv .venv .venv\scripts\activate注: 上記のコマンドを実行するときは、標準の Python インストールを使用してください。Anaconda インストールからの
python.exeを使用すると、ensurepip モジュールが利用できないためにエラーが表示され、環境が未完成の状態になります。 -
code .を実行するか、VS Code を実行して ファイル > フォルダーを開く コマンドを使用して、プロジェクトフォルダーを VS Code で開きます。 -
VS Code で、コマンドパレットを開きます (表示 > コマンドパレット または (⇧⌘P (Windows、Linux Ctrl+Shift+P)))。次に、Python: インタープリターを選択 コマンドを選択します

-
このコマンドは、VS Code が自動的に見つけられる利用可能なインタープリターのリストを表示します (あなたのリストは異なります。目的のインタープリターが表示されない場合は、Python 環境の構成 を参照してください)。リストから、プロジェクトフォルダー内の
./.venvまたは.\.venvで始まる仮想環境を選択します
-
コマンドパレットから ターミナル: 新しいターミナルを作成 (⌃⇧` (Windows、Linux Ctrl+Shift+`)) を実行します。これにより、ターミナルが作成され、アクティベーションスクリプトを実行することで仮想環境が自動的にアクティブ化されます。
注: Windows で、デフォルトのターミナル タイプが PowerShell の場合、システムでスクリプトの実行が無効になっているため activate.ps1 を実行できないというエラーが表示されることがあります。このエラーには、スクリプトを許可する方法に関する情報へのリンクが含まれています。それ以外の場合は、ターミナル: デフォルト プロファイルを選択 を使用して、「コマンド プロンプト」または「Git Bash」を代わりにデフォルトとして設定してください。
-
選択した環境は、VS Code ステータスバーの右側に表示され、仮想環境を使用していることを示す ('.venv': venv) インジケーターが表示されます。

-
VS Code ターミナルで次のコマンドを実行して、仮想環境の pip を更新します
python -m pip install --upgrade pip -
VS Code ターミナルで次のコマンドを実行して、仮想環境に Django をインストールします
python -m pip install django
これで、Django コードを記述するための自己完結型環境が準備できました。VS Code は、ターミナル: 新しいターミナルを作成 (⌃⇧` (Windows、Linux Ctrl+Shift+`)) を使用すると、環境を自動的にアクティブ化します。別のコマンドプロンプトまたはターミナルを開く場合は、source .venv/bin/activate (Linux/macOS) または .venv\Scripts\Activate.ps1 (Windows) を実行して環境をアクティブ化します。コマンドプロンプトの先頭に (.venv) と表示されていれば、環境がアクティブ化されています。
最小限の Django アプリを作成して実行する
Django の用語では、「Django プロジェクト」はいくつかのサイトレベルの構成ファイルと、完全な Web アプリケーションを作成するために Web ホストにデプロイする 1 つ以上の「アプリ」で構成されます。Django プロジェクトには複数のアプリを含めることができ、各アプリは通常、プロジェクト内で独立した機能を持っています。また、同じアプリを複数の Django プロジェクトに含めることもできます。アプリ自体は、Django が期待する特定の規則に従う単なる Python パッケージです。
したがって、最小限の Django アプリを作成するには、まずアプリのコンテナとして機能する Django プロジェクトを作成し、次にアプリ自体を作成する必要があります。どちらの目的にも、Django パッケージをインストールするとインストールされる Django 管理ユーティリティ django-admin を使用します。
Django プロジェクトを作成する
-
仮想環境がアクティブ化されている VS Code ターミナルで、次のコマンドを実行します
django-admin startproject web_project .この
startprojectコマンドは、(末尾の.の使用により) 現在のフォルダーがプロジェクトフォルダーであることを想定しており、その中に次を作成します。-
manage.py: プロジェクトの Django コマンドライン管理ユーティリティです。python manage.pyを使用して、プロジェクトの管理コマンドを実行します。[options] -
web_projectというサブフォルダーには、次のファイルが含まれています__init__.py: このフォルダーが Python パッケージであることを Python に伝える空のファイル。asgi.py: ASGI互換 Web サーバーがプロジェクトをサービスするためのエントリポイント。これは通常、本番 Web サーバーのフックを提供するため、そのままにしておきます。settings.py: Django プロジェクトの設定が含まれており、Web アプリ開発中に変更します。urls.py: Django プロジェクトの目次が含まれており、開発中にこれも変更します。wsgi.py: WSGI互換 Web サーバーがプロジェクトをサービスするためのエントリポイント。これは通常、本番 Web サーバーのフックを提供するため、そのままにしておきます。
-
-
次のコマンドを実行して、空の開発用データベースを作成します
python manage.py migrateサーバーを初めて実行すると、開発目的のデフォルトの SQLite データベースが
db.sqlite3ファイルに作成されますが、低容量の Web アプリケーションでは本番環境でも使用できます。データベースに関する追加情報については、「データベースの種類」セクションを参照してください。 -
Django プロジェクトを確認するには、仮想環境がアクティブになっていることを確認し、
python manage.py runserverコマンドを使用して Django の開発サーバーを起動します。サーバーはデフォルトのポート 8000 で実行され、ターミナルウィンドウに次のような出力が表示されますWatching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). June 13, 2023 - 18:38:07 Django version 4.2.2, using settings 'web_project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.Django の組み込み Web サーバーは、ローカル開発目的でのみ使用されます。ただし、Web ホストにデプロイする場合、Django は代わりにホストの Web サーバーを使用します。Django プロジェクトの
wsgi.pyおよびasgi.pyモジュールは、本番サーバーへのフックを処理します。デフォルトの 8000 以外のポートを使用したい場合は、
python manage.py runserver 5000のように、コマンドラインでポート番号を指定します。 -
ターミナル出力ウィンドウの
http://127.0.0.1:8000/URL を Ctrl+クリック すると、デフォルトのブラウザでそのアドレスが開きます。Django が正しくインストールされ、プロジェクトが有効であれば、下に示されているデフォルトページが表示されます。VS Code のターミナル出力ウィンドウにもサーバーログが表示されます。
-
完了したら、ブラウザウィンドウを閉じ、ターミナル出力ウィンドウに表示されている Ctrl+C を使用して VS Code でサーバーを停止します。
Django アプリケーションを作成する
-
仮想環境がアクティブ化された VS Code ターミナルで、プロジェクトフォルダー (
manage.pyが存在する場所) で管理ユーティリティのstartappコマンドを実行しますpython manage.py startapp helloこのコマンドは、多数のコードファイルと1つのサブフォルダーを含む
helloというフォルダーを作成します。これらの中で、頻繁に操作するのはviews.py(Web アプリのページを定義する関数が含まれています) とmodels.py(データオブジェクトを定義するクラスが含まれています) です。migrationsフォルダーは、このチュートリアルの後半で説明するように、Django の管理ユーティリティがデータベースバージョンを管理するために使用します。他にも、apps.py(アプリ構成)、admin.py(管理インターフェース を作成するため)、tests.py(テストを作成するため) がありますが、ここでは扱いません。 -
アプリのホームページの単一のビューを作成する次のコードと一致するように
hello/views.pyを変更しますfrom django.http import HttpResponse def home(request): return HttpResponse("Hello, Django!") -
以下の内容で
hello/urls.pyファイルを作成します。urls.pyファイルは、さまざまな URL を適切なビューにルーティングするためのパターンを指定する場所です。以下のコードには、アプリのルート URL ("") を、hello/views.pyに追加したばかりのviews.home関数にマッピングする 1 つのルートが含まれています。from django.urls import path from hello import views urlpatterns = [ path("", views.home, name="home"), ] -
web_projectフォルダーにもurls.pyファイルが含まれており、ここで URL ルーティングが実際に処理されます。web_project/urls.pyを開いて、次のコードと一致するように変更します (必要に応じて、指示コメントは保持できます)。このコードは、django.urls.includeを使用してアプリのhello/urls.pyを取り込み、アプリのルートをアプリ内に保持します。この分離は、プロジェクトに複数のアプリが含まれている場合に役立ちます。from django.contrib import admin from django.urls import include, path urlpatterns = [ path("", include("hello.urls")), path('admin/', admin.site.urls) ] -
変更したファイルをすべて保存します。
-
VS Code ターミナルで、仮想環境を再度アクティブにして、
python manage.py runserverで開発サーバーを実行し、ブラウザーでhttp://127.0.0.1:8000/を開いて「Hello, Django」と表示されるページを確認します。
デバッガー起動プロファイルを作成する
毎回 python manage.py runserver と入力しなくても、サーバーを実行してアプリをテストするもっと簡単な方法はないかと、おそらくすでに疑問に思っていることでしょう。幸いなことに、あります!VS Code でカスタマイズされた起動プロファイルを作成できます。これは、避けられないデバッグの練習にも使用されます。
-
VS Code の 実行 ビューに切り替えます (左側のアクティビティバーまたは F5 を使用)。「実行とデバッグをカスタマイズするには、launch.json ファイルを作成してください」というメッセージが表示される場合があります。これは、デバッグ構成を含む
launch.jsonファイルがまだないことを意味します。launch.json ファイルを作成する リンクをクリックすると、VS Code がそれを作成できます。
-
リンクを選択すると、VS Code はデバッグ構成を要求します。ドロップダウンから Django を選択すると、VS Code は Django 実行構成で新しい
launch.jsonファイルを生成します。launch.jsonファイルには多数のデバッグ構成が含まれており、それぞれがconfiguration配列内の個別の JSON オブジェクトです。 -
スクロールダウンして、「Python: Django」という名前の構成を調べます
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Python Debugger: Django", "type": "debugpy", "request": "launch", "program": "${workspaceFolder}\\manage.py", "args": ["runserver"], "django": true, "justMyCode": true } ] }この構成は、選択した Python インタープリターと
argsリストの引数を使用して"${workspaceFolder}/manage.py"を実行するように VS Code に指示します。この構成で VS Code デバッガーを起動することは、アクティブな仮想環境で VS Code ターミナルでpython manage.py runserverを実行することと同じです。(必要に応じて、"5000"のようなポート番号をargsに追加できます。)"django": trueエントリは、Django ページテンプレートのデバッグを有効にするように VS Code に指示します。これについては、このチュートリアルの後半で説明します。 -
実行 > デバッグの開始 メニューコマンドを選択するか、リストの横にある緑色の デバッグの開始 矢印 (F5) を選択して、構成をテストします。

-
ターミナル出力ウィンドウの
http://127.0.0.1:8000/URL を Ctrl+クリック してブラウザを開き、アプリが正常に実行されていることを確認します。 -
終了したら、ブラウザを閉じ、デバッガーを停止します。デバッガーを停止するには、ツールバーの停止ボタン (赤い四角) または 実行 > デバッグの停止 コマンド (⇧F5 (Windows, Linux Shift+F5)) を使用します。
-
いつでも 実行 > デバッグの開始 を使用してアプリをテストできるようになりました。これにより、変更されたすべてのファイルが自動的に保存されるという利点もあります。
デバッガーを探索する
デバッグにより、実行中のプログラムを特定のコード行で一時停止する機会が得られます。プログラムが一時停止している間は、変数を調べたり、デバッグ コンソール パネルでコードを実行したり、デバッグ で説明されている機能を利用したりできます。デバッガーを実行すると、デバッグ セッションが開始される前に、変更されたファイルが自動的に保存されます。
開始する前に: 前のセクションの最後に、ターミナルで Ctrl+C を使用して実行中のアプリを停止したことを確認してください。1 つのターミナルでアプリを実行したままにすると、ポートが占有されたままになります。その結果、同じポートを使用してデバッガーでアプリを実行すると、元の実行中のアプリがすべてのリクエストを処理し、デバッグ中のアプリでアクティビティが表示されず、プログラムがブレークポイントで停止しません。つまり、デバッガーが機能していないように見える場合は、他のアプリのインスタンスがまだ実行されていないことを確認してください。
-
hello/urls.pyで、urlpatternsリストにルートを追加しますpath("hello/<name>", views.hello_there, name="hello_there"),pathの最初の引数は、*name* と呼ばれる変数文字列を受け入れるルート「hello/」を定義します。文字列は、pathの 2 番目の引数で指定されたviews.hello_there関数に渡されます。URL ルートは大文字と小文字を区別します。たとえば、ルート
/hello/は/Hello/とは異なります。同じビュー関数で両方を処理する場合は、各バリアントのパスを定義します。 -
デバッガーでステップ実行できる
hello_there関数を定義するために、views.pyの内容を次のコードに置き換えます。import re from django.utils.timezone import datetime from django.http import HttpResponse def home(request): return HttpResponse("Hello, Django!") def hello_there(request, name): now = datetime.now() formatted_now = now.strftime("%A, %d %B, %Y at %X") # Filter the name argument to letters only using regular expressions. URL arguments # can contain arbitrary text, so we restrict to safe characters only. match_object = re.match("[a-zA-Z]+", name) if match_object: clean_name = match_object.group(0) else: clean_name = "Friend" content = "Hello there, " + clean_name + "! It's " + formatted_now return HttpResponse(content)URL ルートで定義された
name変数は、hello_there関数への引数として与えられます。コードコメントで説明されているように、アプリへのさまざまな攻撃を回避するために、ユーザーが提供する任意の情報を常にフィルタリングしてください。この場合、コードは名前引数を文字のみを含むようにフィルタリングし、制御文字、HTML などの挿入を回避します。(次のセクションでテンプレートを使用する場合、Django は自動フィルタリングを実行するため、このコードは不要です。) -
hello_there関数の最初のコード行 (now = datetime.now()) にブレークポイントを設定するには、次のいずれかの操作を行います- その行にカーソルを置いて F9 を押すか、
- その行にカーソルを置いて 実行 > ブレークポイントの切り替え メニュー コマンドを選択するか、
- 行番号の左側の余白を直接クリックします (ホバーすると薄い赤い点が表示されます)。
ブレークポイントは左余白に赤い点として表示されます

-
実行 > デバッグの開始 メニュー コマンドを選択するか、リストの横にある緑色の デバッグの開始 矢印 (F5) を選択してデバッガーを開始します

ステータス バーの色がデバッグを示すように変化することを確認します

VS Code には、デバッグツールバー (下図) も表示され、以下の順序でコマンドが含まれています: 一時停止 (または続行、F5)、ステップオーバー (F10)、ステップイン (F11)、ステップアウト (⇧F11 (Windows, Linux Shift+F11))、再起動 (⇧⌘F5 (Windows, Linux Ctrl+Shift+F5))、停止 (⇧F5 (Windows, Linux Shift+F5))。各コマンドの説明については、VS Code のデバッグ を参照してください。

-
出力は「Python デバッグコンソール」ターミナルに表示されます。ブラウザを開き、
http://127.0.0.1:8000/hello/VSCodeに移動します。ページがレンダリングされる前に、VS Code は設定したブレークポイントでプログラムを一時停止します。ブレークポイントの小さな黄色の矢印は、それが次に実行されるコード行であることを示しています。
-
ステップオーバーを使用して、
now = datetime.now()ステートメントを実行します。 -
VS Code ウィンドウの左側には、
nowなどのローカル変数や、nameなどの引数を示す 変数 ペインが表示されます。その下には、ウォッチ、コール スタック、ブレークポイント のペインがあります (詳細については、VS Code デバッグ を参照してください)。ローカル セクションで、さまざまな値を展開してみてください。値をダブルクリック (または Enter (Windows, Linux F2) を使用) して変更することもできます。ただし、nowのような変数を変更すると、プログラムが破損する可能性があります。開発者は通常、コードが最初から正しい値を生成しなかった場合にのみ、値を修正するために変更を加えます。
-
プログラムが一時停止しているとき、デバッグコンソール パネル (ターミナルパネルの「Python デバッグコンソール」とは異なります) を使用すると、式を試したり、プログラムの現在の状態を使用してコードの一部を試したりできます。たとえば、
now = datetime.now()の行をステップ実行した後、異なる日付/時刻形式を試すことができます。エディターでnow.strftime("%A, %d %B, %Y at %X")と読み取れるコードを選択し、右クリックして デバッグ: 評価 を選択して、そのコードをデバッグコンソールに送信し、そこで実行します。now.strftime("%A, %d %B, %Y at %X") 'Friday, 07 September, 2018 at 07:46:32'ヒント: デバッグ コンソール には、ターミナルに表示されない可能性のあるアプリ内の例外も表示されます。たとえば、実行とデバッグ ビューの コール スタック 領域に「例外で一時停止」メッセージが表示された場合は、デバッグ コンソール に切り替えて例外メッセージを確認してください。
-
その行をデバッグ コンソール下部の > プロンプトにコピーし、書式設定を変更してみてください
now.strftime("%A, %d %B, %Y at %X") 'Tuesday, 13 June, 2023 at 18:03:19' now.strftime("%a, %d %b, %Y at %X") 'Tue, 13 Jun, 2023 at 18:03:19' now.strftime("%a, %d %b, %y at %X") 'Tue, 13 Jun, 23 at 18:03:19' -
必要に応じて、さらに数行のコードをステップ実行してから、続行 (F5) を選択してプログラムを実行させます。ブラウザ ウィンドウに結果が表示されます

-
コード内の行を別の datetime 形式 (例:
now.strftime("%a, %d %b, %y at %X")) を使用するように変更し、ファイルを保存します。Django サーバーは自動的にリロードされるため、デバッガーを再起動する必要なく変更が適用されます。ブラウザでページを更新して更新を確認します。 -
終了したら、ブラウザを閉じ、デバッガーを停止します。デバッガーを停止するには、ツールバーの停止ボタン (赤い四角) または 実行 > デバッグの停止 コマンド (⇧F5 (Windows, Linux Shift+F5)) を使用します。
ヒント:
http://127.0.0.1:8000/hello/VSCodeのような特定の URL に繰り返し移動しやすくするには、その URL をviews.pyのようなファイルのどこかに
定義へ移動および定義をピーク コマンド
Django またはその他のライブラリを操作している間、それらのライブラリ自体のコードを調べたい場合があります。VS Code は、クラスやその他のオブジェクトの定義に直接移動する 2 つの便利なコマンドを提供します。
-
定義へ移動 は、コードからオブジェクトを定義するコードにジャンプします。たとえば、
views.pyのhome関数でHttpResponseを右クリックし、定義へ移動 (または F12 を使用) を選択すると、Django ライブラリのクラス定義に移動します。 -
定義をピーク (⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10)、右クリック コンテキスト メニューにもあります) も同様ですが、クラス定義をエディターに直接表示します (コードを隠さないようにエディター ウィンドウにスペースを作成します)。Escape を押してピーク ウィンドウを閉じるか、右上隅の x を使用します。

テンプレートを使用してページをレンダリングする
このチュートリアルでこれまで作成したアプリは、Python コードからプレーンテキストの Web ページのみを生成します。コードで HTML を直接生成することは可能ですが、開発者は、アプリが クロスサイトスクリプティング (XSS) 攻撃 にさらされるため、そのような慣行を避けます。たとえば、このチュートリアルの hello_there 関数では、content = " のようにコードで出力をフォーマットすることを考えるかもしれませんが、その結果の Hello there, " + clean_name + "!
"content がブラウザーに直接渡されます。この開口部により、攻撃者は、JavaScript コードを含む悪意のある HTML を URL に配置でき、それが clean_name に入り込み、最終的にブラウザーで実行されることになります。
はるかに良い方法は、テンプレート を使用して HTML をコードから完全に分離することです。これにより、コードはデータ値のみに関心を持ち、レンダリングには関心を持ちません。
Django では、テンプレートは、コードが実行時に提供する値のプレースホルダーを含む HTML ファイルです。Django テンプレートエンジンは、ページのレンダリング時に置換を処理し、XSS 攻撃を防ぐための自動エスケープを提供します (つまり、データ値で HTML を使用しようとすると、HTML はプレーンテキストとしてのみレンダリングされます)。したがって、コードはデータ値のみに関心を持ち、テンプレートはマークアップのみに関心を持ちます。Django テンプレートは、テンプレート継承などの柔軟なオプションを提供します。これにより、共通のマークアップを持つベースページを定義し、そのベースにページ固有の追加で構築できます。
このセクションでは、テンプレートを使用して単一のページを作成することから始めます。その後のセクションでは、静的ファイルを配信するようにアプリを設定し、ベーステンプレートからナビゲーションバーを含む複数のページをアプリに追加します。Django テンプレートは、制御フローと反復もサポートしています。これについては、このチュートリアルの後半でテンプレートデバッグのコンテキストで説明します。
-
web_project/settings.pyファイルで、INSTALLED_APPSリストを見つけて、次のエントリを追加します。これにより、プロジェクトがアプリのテンプレート処理を認識できるようになります。'hello', -
helloフォルダー内にtemplatesという名前のフォルダーを作成し、次にアプリ名と一致する別のサブフォルダーhelloを作成します (この2層のフォルダー構造は典型的な Django の慣例です)。 -
templates/helloフォルダーに、以下の内容でhello_there.htmlというファイルを作成します。このテンプレートには、「name」と「date」という名前のデータ値のプレースホルダーが2つ含まれており、中括弧{{と}}で区切られています。その他の不変のテキストはすべてテンプレートの一部であり、書式設定マークアップ (など) も含まれています。ご覧のとおり、テンプレートのプレースホルダーには書式設定も含まれる場合があります。パイプ|記号の後の式は、この場合、Django の組み込みの 日付フィルター と 時間フィルター を使用しています。したがって、コードは、事前フォーマットされた文字列ではなく、datetime *値* を渡すだけで済みます。<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Hello, Django</title> </head> <body> <strong>Hello there, {{ name }}!</strong> It's {{ date | date:"l, d F, Y" }} at {{ date | time:"H:i:s" }} </body> </html> -
views.pyの冒頭に、次の import ステートメントを追加しますfrom django.shortcuts import render -
また、
views.pyで、hello_there関数をdjango.shortcuts.renderメソッドを使用してテンプレートをロードし、テンプレートコンテキスト を提供するように変更します。コンテキストは、テンプレート内で使用するための変数のセットです。render関数は、要求オブジェクト、次にtemplatesフォルダーに対する相対パス、次にコンテキストオブジェクトを受け取ります。(開発者は通常、テンプレートにそれらを使用する関数と同じ名前を付けますが、コード内で常に正確なファイル名を参照するため、名前を一致させる必要はありません。)def hello_there(request, name): print(request.build_absolute_uri()) #optional return render( request, 'hello/hello_there.html', { 'name': name, 'date': datetime.now() } )これでコードがはるかにシンプルになり、マークアップと書式設定はすべてテンプレートに含まれるため、データ値のみに関心があることがわかります。
-
プログラムを開始し (デバッガー内または外部で ⌃F5 (Windows, Linux Ctrl+F5) を使用)、/hello/name URL に移動して結果を確認します。
-
また、
のような名前を使用して /hello/name URL に移動して、Django の自動エスケープの動作を確認してください。「name」の値は、実際の要素としてレンダリングされるのではなく、ブラウザでプレーンテキストとして表示されます。
静的ファイルを配信する
静的ファイルとは、CSS ファイルなど、Web アプリケーションが特定の要求に対してそのまま返すコンテンツのことです。静的ファイルを配信するには、settings.py の INSTALLED_APPS リストに django.contrib.staticfiles が含まれている必要があります。これはデフォルトで含まれています。
Django で静的ファイルを配信するのは、特に本番環境にデプロイする場合、一種の技術です。ここで示すのは、Django 開発サーバーと Gunicorn のような本番サーバーの両方で機能するシンプルなアプローチです。ただし、静的ファイルの完全な扱いはこのチュートリアルの範囲外であるため、詳細については、Django ドキュメントの 静的ファイルの管理 を参照してください。
本番環境に切り替える際は、settings.py に移動し、DEBUG=False を設定し、ALLOWED_HOSTS = ['*'] を特定のホストを許可するように変更します。これにより、コンテナを使用する場合に追加の作業が必要になる場合があります。詳細については、Issue 13 を参照してください。
静的ファイル用のアプリを準備する
-
プロジェクトの
web_project/urls.pyに、次のimportステートメントを追加します。from django.contrib.staticfiles.urls import staticfiles_urlpatterns -
同じファイルで、最後に次の行を追加します。これにより、標準の静的ファイル URL がプロジェクトが認識するリストに含まれます。
urlpatterns += staticfiles_urlpatterns()
テンプレート内の静的ファイルを参照する
-
helloフォルダーにstaticという名前のフォルダーを作成します。 -
staticフォルダー内に、アプリ名と一致するhelloというサブフォルダーを作成します。この追加のサブフォルダーの理由は、Django プロジェクトを本番サーバーにデプロイするときに、すべての静的ファイルを単一のフォルダーに収集し、それを専用の静的ファイルサーバーで提供するためです。
static/helloサブフォルダーにより、アプリの静的ファイルが収集されたときに、アプリ固有のサブフォルダーに配置され、同じプロジェクト内の他のアプリからのファイルと衝突しないようになります。 -
static/helloフォルダーに、次の内容でsite.cssというファイルを作成します。このコードを入力した後、VS Code が CSS ファイルに提供する構文強調表示、および色プレビューも確認してください。.message { font-weight: 600; color: blue; } -
templates/hello/hello_there.htmlの要素の後に次の行を追加します。{% load static %}タグはカスタムの Django テンプレートタグセットであり、{% static %}を使用してスタイルシートのようなファイルを参照できます。{% load static %} <link rel="stylesheet" type="text/css" href="{% static 'hello/site.css' %}" /> -
また、
templates/hello/hello_there.htmlの要素の内容を、タグの代わりにmessageスタイルを使用する次のマークアップに置き換えます。<span class="message">Hello, there {{ name }}!</span> It's {{ date | date:'l, d F, Y' }} at {{ date | time:'H:i:s' }}. -
アプリを実行し、/hello/name URL に移動して、メッセージが青色でレンダリングされることを確認します。完了したらアプリを停止します。
collectstatic コマンドを使用する
本番環境へのデプロイでは、通常、python manage.py collectstatic コマンドを使用して、アプリのすべての静的ファイルを単一のフォルダーに収集します。その後、専用の静的ファイルサーバーを使用してそれらのファイルを提供することで、通常、全体的なパフォーマンスが向上します。以下の手順は、この収集がどのように行われるかを示していますが、Django 開発サーバーで実行する場合は収集を使用しません。
-
web_project/settings.pyに、collectstaticコマンドを使用するときに静的ファイルが収集される場所を定義する次の行を追加します。STATIC_ROOT = BASE_DIR / 'static_collected' -
ターミナルで
python manage.py collectstaticコマンドを実行し、hello/site.cssがmanage.pyと並んで最上位のstatic_collectedフォルダーにコピーされることを確認します。 -
実際には、静的ファイルを変更するたびに、本番環境にデプロイする前に
collectstaticを実行します。
ベース テンプレートを拡張する複数のテンプレートを作成する
ほとんどの Web アプリには複数のページがあり、それらのページは通常、多くの共通要素を共有するため、開発者はそれらの共通要素をベースページテンプレートに分離し、他のページテンプレートがそれを拡張します。(これはテンプレート継承とも呼ばれ、拡張されたページはベースページから要素を継承することを意味します。)
また、同じテンプレートを拡張する多くのページを作成する可能性が高いため、VS Code でコード スニペットを作成して、新しいページ テンプレートをすばやく初期化できるようにすると便利です。スニペットは、退屈でエラーが発生しやすいコピー&ペースト操作を回避するのに役立ちます。
次のセクションでは、このプロセスのさまざまな部分について説明します。
ベース ページ テンプレートとスタイルを作成する
Django のベースページテンプレートには、CSS ファイルやスクリプトファイルなどへの参照を含む、一連のページの共有部分がすべて含まれています。ベーステンプレートは、拡張テンプレートがオーバーライドすることを期待する 1 つ以上の ブロック タグも定義します。ブロックタグは、ベーステンプレートと拡張テンプレートの両方で {% block と {% endblock %} で区切られます。
次の手順では、ベース テンプレートの作成方法を示します。
-
templates/helloフォルダーに、以下の内容でlayout.htmlというファイルを作成します。これには、「title」と「content」という名前のブロックが含まれています。ご覧のとおり、マークアップは、Home、About、Contact ページへのリンクを含むシンプルなナビゲーションバー構造を定義しており、これらは後のセクションで作成します。相対パスではなく、対応する URL パターンの名前を介して他のページを参照するために、Django の{% url %}タグが使用されていることに注目してください。<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>{% block title %}{% endblock %}</title> {% load static %} <link rel="stylesheet" type="text/css" href="{% static 'hello/site.css' %}"/> </head> <body> <div class="navbar"> <a href="{% url 'home' %}" class="navbar-brand">Home</a> <a href="{% url 'about' %}" class="navbar-item">About</a> <a href="{% url 'contact' %}" class="navbar-item">Contact</a> </div> <div class="body-content"> {% block content %} {% endblock %} <hr/> <footer> <p>© 2018</p> </footer> </div> </body> </html> -
既存の「message」スタイルの下に次のスタイルを
static/hello/site.cssに追加し、ファイルを保存します。(このチュートリアルではレスポンシブデザインのデモンストレーションは試みません。これらのスタイルは単に、そこそこ興味深い結果を生成するだけです。).navbar { background-color: lightslategray; font-size: 1em; font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; color: white; padding: 8px 5px 8px 5px; } .navbar a { text-decoration: none; color: inherit; } .navbar-brand { font-size: 1.2em; font-weight: 600; } .navbar-item { font-variant: small-caps; margin-left: 30px; } .body-content { padding: 5px; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; }
現時点でもアプリを実行できますが、ベース テンプレートをどこでも使用しておらず、コード ファイルも変更していないため、結果は前の手順と同じになります。最終的な効果を確認するには、残りのセクションを完了してください。
コードスニペットを作成する
次のセクションで作成する 3 つのページはすべて layout.html を拡張するため、ベース テンプレートへの適切な参照で新しいテンプレート ファイルを初期化する コード スニペット を作成すると時間を節約できます。コード スニペットは、単一のソースから一貫性のあるコードを提供し、既存のコードからのコピー&ペーストを使用するときに忍び込む可能性のあるエラーを回避します。
-
VS Code で、ファイル (Windows/Linux) または コード (macOS) メニューを選択し、次に 設定 > ユーザー スニペット を選択します。
-
表示されるリストで html を選択します。(以前にスニペットを作成している場合は、リストの 既存のスニペット セクションに「html.json」として表示される場合があります。)
-
VS Code で
html.jsonが開いたら、既存の中括弧内に以下のコードを追加します。(ここでは示されていませんが、説明コメントには、$0行がスニペットを挿入した後に VS Code がカーソルをどこに配置するかなどの詳細が記述されています。)"Django Tutorial: template extending layout.html": { "prefix": "djextlayout", "body": [ "{% extends \"hello/layout.html\" %}", "{% block title %}", "$0", "{% endblock %}", "{% block content %}", "{% endblock %}" ], "description": "Boilerplate template that extends layout.html" }, -
html.jsonファイルを保存します (⌘S (Windows, Linux Ctrl+S))。 -
これで、次に示すように、スニペットのプレフィックス (例:
djext) の入力を開始すると、VS Code がオートコンプリートオプションとしてスニペットを提供します。スニペットの挿入 コマンドを使用して、メニューからスニペットを選択することもできます。
コード スニペット全般に関する詳細については、スニペットの作成 を参照してください。
コードスニペットを使用してページを追加する
コード スニペットが用意できたので、ホーム、アバウト、コンタクト ページ用のテンプレートをすばやく作成できます。
-
templates/helloフォルダーにhome.htmlという名前の新しいファイルを作成し、djextの入力を開始してスニペットが完了として表示されることを確認します。
補完を選択すると、スニペットのコードがスニペットの挿入ポイントにカーソルを置いて表示されます

-
「title」ブロックの挿入ポイントに
Homeと書き込み、「content」ブロックにと書き込み、ファイルを保存します。これらの行が、拡張ページテンプレートの唯一のユニークな部分です。Visual Studio Code Django チュートリアルのホームページです。
-
templates/helloフォルダーにabout.htmlを作成し、スニペットを使用して定型マークアップを挿入し、「title」と「content」ブロックにそれぞれAbout usとを挿入し、ファイルを保存します。Visual Studio Code Django チュートリアルの about ページです。
-
前の手順を繰り返して、
templates/hello/contact.htmlをContact usとを使用して作成します。Visual Studio Code Django チュートリアルのコンタクトページです。
-
アプリの
urls.pyで、/about および /contact ページのルートを追加します。path関数のname引数は、テンプレートの{% url %}タグでページを参照する名前を定義していることに注意してください。path("about/", views.about, name="about"), path("contact/", views.contact, name="contact"), -
views.pyで、/about および /contact ルートに対応する関数を定義し、それぞれのページテンプレートを参照するようにします。また、home関数をhome.htmlテンプレートを使用するように変更します。# Replace the existing home function with the one below def home(request): return render(request, "hello/home.html") def about(request): return render(request, "hello/about.html") def contact(request): return render(request, "hello/contact.html")
アプリを実行する
すべてのページテンプレートが配置されたら、views.py を保存し、アプリを実行し、ブラウザでホームページを開いて結果を確認します。ページ間を移動して、ページテンプレートがベーステンプレートを正しく拡張していることを確認します。

データ、データモデル、およびマイグレーションの操作
多くの Web アプリケーションはデータベースに保存された情報と連携しており、Django は、そのデータベース内のオブジェクトを モデル を使用して簡単に表現できます。Django では、モデルは django.db.models.Model から派生した Python クラスであり、特定のデータベースオブジェクト (通常はテーブル) を表します。これらのクラスは、アプリの models.py ファイルに配置します。
Django では、コードで定義するモデルを通じて、ほぼ排他的にデータベースを操作します。Django の「マイグレーション」は、時間の経過とともにモデルが進化したときに、基になるデータベースのすべての詳細を自動的に処理します。一般的なワークフローは次のとおりです。
models.pyファイルのモデルを変更します。python manage.py makemigrationsを実行して、データベースを現在の状態から新しい状態に移行するスクリプトをmigrationsフォルダーに生成します。python manage.py migrateを実行して、実際のデータベースにスクリプトを適用します。
マイグレーションスクリプトは、データモデルに対して時間経過とともに加えられたすべての増分変更を効果的に記録します。マイグレーションを適用することで、Django はデータベースをモデルに合わせて更新します。各増分変更には独自のスクリプトがあるため、Django はデータベースの どの 以前のバージョン (新しいデータベースを含む) でも現在のバージョンに自動的に移行できます。結果として、models.py 内のモデルのみに関心を持ち、基盤となるデータベーススキーマやマイグレーションスクリプトについては気にする必要はありません。その部分は Django に任せてください!
コードでも、モデルクラスのみを使用してデータを保存および取得します。Django が基盤となる詳細を処理します。唯一の例外は、Django 管理ユーティリティの loaddata コマンド を使用してデータベースにデータを書き込むことができることです。このユーティリティは、migrate コマンドがスキーマを初期化した後にデータセットを初期化するためによく使用されます。
db.sqlite3 ファイルを使用する場合、SQLite browser のようなツールを使用してデータベースを直接操作することもできます。そのようなツールを使用してテーブルのレコードを追加または削除しても問題ありませんが、データベーススキーマの変更は避けてください。そうしないと、データベースがアプリのモデルと同期しなくなります。代わりに、モデルを変更し、makemigrations を実行し、次に migrate を実行します。
データベースの種類
デフォルトでは、Django はアプリのデータベース用の db.sqlite3 ファイルを含んでおり、これは開発作業に適しています。SQLite の使用時期 (sqlite.org) で説明されているように、SQLite は 1 日あたり 10 万ヒット未満の低トラフィックから中トラフィックのサイトでは問題なく機能しますが、それ以上のボリュームには推奨されません。また、単一のコンピューターに制限されているため、ロードバランシングや地理的レプリケーションなどのマルチサーバーシナリオでは使用できません。
これらの理由から、PostgreSQL、MySQL、SQL Server などの本番レベルのデータストアの使用を検討してください。他のデータベースに対する Django のサポートに関する情報については、データベースの設定 を参照してください。また、Azure SDK for Python を使用して、テーブルやBLOBなどの Azure ストレージサービスを操作することもできます。
モデルを定義する
Django モデルは、django.db.model.Models から派生した Python クラスであり、アプリの models.py ファイルに配置します。データベースでは、各モデルに id という一意の ID フィールドが自動的に付与されます。他のすべてのフィールドは、django.db.models からの型 (CharField (制限付きテキスト)、TextField (無制限テキスト)、EmailField、URLField、IntegerField、DecimalField、BooleanField。DateTimeField、ForeignKey、ManyToMany など) を使用してクラスのプロパティとして定義されます。(詳細については、Django ドキュメントの モデルフィールドリファレンス を参照してください。)
各フィールドには、max_length などの属性があります。blank=True 属性はフィールドがオプションであることを意味し、null=true は値がオプションであることを意味します。また、データ値/表示値タプルの配列内の値に値を制限する choices 属性もあります。
たとえば、models.py に次のクラスを追加して、シンプルなメッセージログの日付付きエントリを表すデータモデルを定義します。
from django.db import models
from django.utils import timezone
class LogMessage(models.Model):
message = models.CharField(max_length=300)
log_date = models.DateTimeField("date logged")
def __str__(self):
"""Returns a string representation of a message."""
date = timezone.localtime(self.log_date)
return f"'{self.message}' logged on {date.strftime('%A, %d %B, %Y at %X')}"
モデルクラスには、他のクラスプロパティから計算された値を返すメソッドを含めることができます。モデルには通常、インスタンスの文字列表現を返す __str__ メソッドが含まれています。
データベースを移行する
models.py を編集してデータモデルを変更したため、データベース自体を更新する必要があります。VS Code で、仮想環境がアクティブ化されたターミナルを開き (ターミナル: 新しいターミナルを作成 コマンド (⌃⇧` (Windows, Linux Ctrl+Shift+`)) を使用)、プロジェクトフォルダーに移動して、次のコマンドを実行します。
python manage.py makemigrations
python manage.py migrate
migrations フォルダーで makemigrations が生成したスクリプトを確認します。データベース自体を調べて、スキーマが更新されていることも確認できます。
コマンドの実行中にエラーが表示された場合は、以前のステップで残っているデバッグターミナルを使用していないことを確認してください。仮想環境がアクティブ化されていない可能性があります。
モデルを介してデータベースを使用する
モデルが配置され、データベースが移行されたので、モデルのみを使用してデータを保存および取得できます。このセクションでは、メッセージを記録できるフォームページをアプリに追加します。次に、それらのメッセージを表示するようにホームページを変更します。ここでは多くのコードファイルを変更するため、詳細に注意してください。
-
helloフォルダー (views.pyがある場所) に、次のコードでforms.pyという新しいファイルを作成します。これは、データモデルLogMessageから取得されたフィールドを含む Django フォームを定義します。from django import forms from hello.models import LogMessage class LogMessageForm(forms.ModelForm): class Meta: model = LogMessage fields = ("message",) # NOTE: the trailing comma is required -
templates/helloフォルダーに、以下の内容でlog_message.htmlという新しいテンプレートを作成します。これは、テンプレートにフォームの本文を定義するためのformという名前の変数が与えられていることを想定しています。次に、「Log」というラベルの付いた送信ボタンを追加します。{% extends "hello/layout.html" %} {% block title %} Log a message {% endblock %} {% block content %} <form method="POST" class="log-form"> {% csrf_token %} {{ form.as_p }} <button type="submit" class="save btn btn-default">Log</button> </form> {% endblock %}注: Django の
{% csrf_token %}タグは、クロスサイトリクエストフォージェリからの保護を提供します。詳細については、Django ドキュメントの クロスサイトリクエストフォージェリ保護 を参照してください。 -
アプリの
static/hello/site.cssファイルに、入力フォームを広くするためのルールを追加しますinput[name=message] { width: 80%; } -
アプリの
urls.pyファイルに、新しいページのルートを追加します。path("log/", views.log_message, name="log"), -
views.pyで、log_messageという名前のビューを定義します (URL ルートで参照されているとおり)。このビューは、HTTP GET と POST の両方のケースを処理します。GET の場合 (else:セクション)、前の手順で定義したフォームを表示するだけです。POST の場合、フォームからデータ (message) をデータオブジェクトに取得し、タイムスタンプを設定してから、そのオブジェクトを保存します。この時点で、データはデータベースに書き込まれます。# Add these to existing imports at the top of the file: from django.shortcuts import redirect from hello.forms import LogMessageForm from hello.models import LogMessage # Add this code elsewhere in the file: def log_message(request): form = LogMessageForm(request.POST or None) if request.method == "POST": if form.is_valid(): message = form.save(commit=False) message.log_date = datetime.now() message.save() return redirect("home") else: return render(request, "hello/log_message.html", {"form": form}) -
すべてを試す準備が整う前に、もう 1 つ手順があります!
templates/hello/layout.htmlで、メッセージログページへのリンクを「navbar」div に追加します。<!-- Insert below the link to Home --> <a href="{% url 'log' %}" class="navbar-item">Log Message</a> -
アプリを実行し、ブラウザでホームページを開きます。ナビゲーションバーの メッセージをログ リンクを選択すると、メッセージログページが表示されるはずです。

-
メッセージを入力し、ログ を選択すると、ホームページに戻るはずです。ホームページにはまだログに記録されたメッセージが表示されません (これはすぐに修正します)。いくつかメッセージをログに記録しても構いません。必要に応じて、SQLite Browser のようなツールを使用してデータベースを覗き見して、レコードが作成されたことを確認してください。データベースを読み取り専用で開くか、アプリを使用する前にデータベースを閉じることを忘れないでください。そうしないと、データベースがロックされているためアプリが失敗します。
-
作業が完了したら、アプリを停止します。
-
次に、ホームページを変更して、ログに記録されたメッセージを表示します。まず、アプリの
templates/hello/home.htmlファイルの内容を以下のマークアップに置き換えます。このテンプレートは、message_listという名前のコンテキスト変数を想定しています。受け取った場合 ({% if message_list %}タグで確認)、そのリストを反復処理して ({% for message in message_list %}タグ)、各メッセージのテーブル行を生成します。それ以外の場合、ページにはまだメッセージがログに記録されていないことが示されます。{% extends "hello/layout.html" %} {% block title %} Home {% endblock %} {% block content %} <h2>Logged messages</h2> {% if message_list %} <table class="message_list"> <thead> <tr> <th>Date</th> <th>Time</th> <th>Message</th> </tr> </thead> <tbody> {% for message in message_list %} <tr> <td>{{ message.log_date | date:'d M Y' }}</td> <td>{{ message.log_date | time:'H:i:s' }}</td> <td> {{ message.message }} </td> </tr> {% endfor %} </tbody> </table> {% else %} <p>No messages have been logged. Use the <a href="{% url 'log' %}">Log Message form</a>.</p> {% endif %} {% endblock %} -
static/hello/site.cssに、テーブルを少し整形するためのルールを追加します。.message_list th,td { text-align: left; padding-right: 15px; } -
views.pyで、Django の汎用ListViewクラスをインポートします。これは、ホームページを実装するために使用します。from django.views.generic import ListView -
また、
views.pyで、home関数をListViewから派生したHomeListViewという名前の クラス に置き換えます。このクラスは、LogMessageモデルにバインドされ、テンプレートのコンテキストを生成するget_context_data関数を実装します。# Remove the old home function if you want; it's no longer used class HomeListView(ListView): """Renders the home page, with a list of all messages.""" model = LogMessage def get_context_data(self, **kwargs): context = super(HomeListView, self).get_context_data(**kwargs) return context -
アプリの
urls.pyで、データモデルをインポートします。from hello.models import LogMessage -
また、
urls.pyで、新しいビューの変数を設定します。これは、最新のLogMessageオブジェクトを降順で 5 つ取得し (つまり、データベースをクエリし)、テンプレートコンテキストでデータの名前 (message_list) を提供し、使用するテンプレートを識別します。home_list_view = views.HomeListView.as_view( queryset=LogMessage.objects.order_by("-log_date")[:5], # :5 limits the results to the five most recent context_object_name="message_list", template_name="hello/home.html", ) -
urls.pyで、ホームページへのパスをhome_list_view変数を使用するように変更します。# Replace the existing path for "" path("", home_list_view, name="home"), -
アプリを起動し、ブラウザでホームページを開くと、メッセージが表示されるはずです。

-
作業が完了したら、アプリを停止します。
ページテンプレートでデバッガーを使用する
前のセクションで示したように、ページテンプレートは {% url %} や {% block %} のような受動的で宣言的な要素だけでなく、{% for message in message_list %} や {% if message_list %} のような手続き型ディレクティブを含めることができます。その結果、他の手続き型コードと同様に、テンプレート内にもプログラミングエラーが発生する可能性があります。
幸いなことに、VS Code 用の Python 拡張機能は、デバッグ構成に "django": true がある場合 (すでにそうですが) にテンプレートデバッグを提供します。次の手順でこの機能を示します。
-
templates/hello/home.htmlで、以下の画像にある黄色の矢印で示されているように、{% if message_list %}と{% for message in message_list %}の両方の行にブレークポイントを設定します。
-
デバッガーでアプリを実行し、ブラウザでホームページを開きます。(すでにデバッガーを実行している場合は、ブレークポイントを設定した後にアプリを再起動する必要はありません。ページを更新するだけです。) VS Code がテンプレートの
{% if %}ステートメントでデバッガーにブレークインし、変数 ペインにすべてのコンテキスト変数が表示されることを確認します。
-
ステップオーバー (F10) コマンドを使用して、テンプレートコードをステップ実行します。すべての宣言ステートメントをスキップし、任意の手続き型コードで一時停止することを確認します。たとえば、
{% for message in message_list %}ループをステップ実行すると、messageの各値を調べ、のような行にステップ実行できます。{{ message.log_date | date:'d M Y' }} -
デバッグコンソール パネルで変数と連携することもできます。(ただし、
dateのような Django フィルターは現在コンソールでは利用できません。) -
準備ができたら、続行 (F5) を選択してアプリの実行を終了し、レンダリングされたページをブラウザで表示します。終了したらデバッガーを停止します。
オプションのアクティビティ
以下のセクションでは、Python および Visual Studio Code を使用する際に役立つ可能性のある追加の手順について説明します。
環境の requirements.txt ファイルを作成する
ソース管理やその他の手段でアプリコードを共有する場合、仮想環境内のすべてのファイルをコピーすることは意味がありません。なぜなら、受け取った人がいつでも自分でその環境を再作成できるからです。
したがって、開発者は通常、仮想環境フォルダーをソース管理から除外し、代わりに requirements.txt ファイルを使用してアプリの依存関係を記述します。
手動でファイルを作成することもできますが、pip freeze コマンドを使用して、アクティブ化された環境にインストールされている正確なライブラリに基づいてファイルを生成することもできます
-
Python: インタープリターを選択 コマンドを使用して選択した環境で、ターミナル: 新しいターミナルを作成 コマンド (⌃⇧` (Windows, Linux Ctrl+Shift+`))) を実行して、その環境がアクティブ化されたターミナルを開きます。
-
ターミナルで
pip freeze > requirements.txtを実行して、プロジェクト フォルダーにrequirements.txtファイルを作成します。
プロジェクトのコピーを受け取る人 (またはビルドサーバー) は、pip install -r requirements.txt コマンドを実行するだけで、アクティブな環境でアプリが依存するパッケージを再インストールできます。
注:
pip freezeは、現在使用していないパッケージを含む、現在の環境にインストールされているすべての Python パッケージを一覧表示します。このコマンドは、正確なバージョン番号を持つパッケージも一覧表示しますが、将来的に柔軟性を高めるために範囲に変換したい場合があります。詳細については、pip コマンドのドキュメントにある 要件ファイル を参照してください。
スーパーユーザーを作成し、管理インターフェースを有効にする
デフォルトでは、Django は認証によって保護された Web アプリの管理インターフェースを提供します。このインターフェースは、プロジェクトの INSTALLED_APPS リスト (settings.py) にデフォルトで含まれている組み込みの django.contrib.admin アプリを通じて実装されており、認証は、同じく INSTALLED_APPS にデフォルトで含まれている組み込みの django.contrib.auth アプリによって処理されます。
管理インターフェースを有効にするには、次の手順を実行します。
-
仮想環境用の VS Code のターミナルを開き、次にコマンド
python manage.py createsuperuser --username=を実行して、アプリにスーパーユーザーアカウントを作成します。もちろん、--email= とはあなたの個人情報に置き換えます。コマンドを実行すると、Django はパスワードの入力と確認を求めます。ユーザー名とパスワードの組み合わせを忘れないようにしてください。これらは、アプリで認証するために使用する資格情報です。
-
プロジェクトレベルの
urls.py(このチュートリアルではweb_project/urls.py) に次の URL ルートを追加して、組み込みの管理インターフェースを指すようにします。# This path is included by default when creating the app path("admin/", admin.site.urls), -
サーバーを実行し、ブラウザでアプリの /admin ページを開きます (開発サーバーを使用している場合は
http://127.0.0.1:8000/adminなど)。 -
django.contrib.authによってログインページが表示されます。スーパーユーザーの資格情報を入力します。
-
認証されると、ユーザーとグループを管理できるデフォルトの管理ページが表示されます。

管理インターフェースは好きなだけカスタマイズできます。たとえば、データベース内のエントリを編集および削除する機能を提供できます。カスタマイズの詳細については、Django 管理サイトのドキュメント を参照してください。
Container Tools 拡張機能を使用して Django アプリのコンテナを作成する
Container Tools 拡張機能 を使用すると、Visual Studio Code からコンテナ化されたアプリケーションを簡単に構築、管理、デプロイできます。このチュートリアルで開発した Django アプリ用の Python コンテナを作成する方法に興味がある場合は、コンテナ内の Python チュートリアルをご覧ください。これは、次の方法を説明します。
- シンプルな Python コンテナーを記述する
Dockerfileファイルを作成する。 - Django アプリの機能を構築、実行、検証します。
- コンテナーで実行されているアプリをデバッグする。
次のステップ
Visual Studio Code での Django の操作に関するこのチュートリアルを完了おめでとうございます!
このチュートリアルで完成したコードプロジェクトは GitHub で見つけることができます: python-sample-vscode-django-tutorial。
このチュートリアルでは、Django ができることのごく一部しか触れていません。ビュー、テンプレート、データモデル、URL ルーティング、管理インターフェース、他の種類のデータベースの使用、本番環境へのデプロイなどに関する詳細については、Django ドキュメント および 公式 Django チュートリアル を必ず参照してください。
アプリを実稼働 Web サイトで試すには、チュートリアル Docker コンテナーを使用して Azure App Service に Python アプリをデプロイする を確認してください。Azure には、標準コンテナーである Linux の App Service もあり、VS Code 内から Web アプリをデプロイできます。
Python に関連する VS Code ドキュメントの以下の記事も確認することをお勧めします