導入
Django開発シリーズをこれまでご覧いただいている方は、管理者権限を持つユーザーがDjango管理インターフェースのダッシュボードからコメントや投稿を追加できるDjangoアプリケーションの作成に成功しているはずです。また、Djangoのオブジェクトリレーショナルマッピング(ORM)ソリューションモデルとMySQLを使用してデータの永続性も設定しました。.
このチュートリアルでは、Djangoのビューを作成します。これにより、WebアプリケーションがWebリクエストを適切に処理し、必要なWebレスポンスを返すことができます。Djangoのドキュメントで定義されているように、Webレスポンスとは、WebページのHTMLコンテンツ、リダイレクト、またはHTTPエラー(例:404)のいずれかです。ビュー関数のコードは、Pythonパス内であれば、プロジェクト内のどこにでも配置できます。ただし、これらのビュー関数を含むファイルの命名と配置には、いくつかの一般的な規則があり、ここではそれに従います。.
このチュートリアルの手順を完了すると、Django ブログ サイトは最近の投稿を IP またはドメイン/投稿 URL に取得します。.
前提条件
このチュートリアルは、Django 開発シリーズの一部であり、そのシリーズの続きです。.
このシリーズをフォローしていない場合は、次のことを前提としています。
- Django バージョン 4 以降がインストールされています。.
- Django アプリケーションをデータベースに接続しました。.
- Unix ベースのオペレーティング システムを使用しています。テストに使用したシステムである Ubuntu 22.04 クラウド サーバーが望ましいです。.
- Django 管理インターフェースを設定しました。.
このガイドは主に Django ビューを扱っているため、異なる設定であっても従うことができる可能性があります。.
ステップ1 – 表示関数を作成する
ターミナルで、まず適切なディレクトリに移動し、Python仮想環境を有効化する必要があります。このシリーズを既にご覧いただいている場合は、以下のコマンドを入力できます。アプリケーションを開発する際は、コードが適切な設定で動作し、適切に実装されていることを確認するために、常にPythonプログラミング環境を使用することが重要です。.
cd ~/my_blog_app
. env/bin/activate仮想環境が有効になったので、サイトのブログ ディレクトリに移動し、Python ファイルを開いて最初のビュー関数を作成します。.
cd ~/my_blog_app/blog/blogsitenano または任意のテキスト エディターを使用して views.py ファイルを開き、編集します。.
nano views.pyファイルを開くと、次のようなコードが入力されているはずです。
from django.shortcuts import render
# Create your views here.django.shortcuts ライブラリから render() 関数をインポートするimport文はそのまま残しておきます。render() 関数を使うと、テンプレートとテキストを組み合わせて適切な HttpResponse オブジェクトを返すことができます。作成するすべてのビューにおいて、HttpResponse のインスタンス化、設定、そして返送は開発者の責任となるため、この点に留意してください。.
次に、ユーザーをインデックスページに迎える最初のビューを追加します。DjangoのhttpライブラリからHttpResponse()関数をインポートします。この関数を使って、Webページがリクエストされた際に表示するテキストを送信します。.
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello, welcome to the index page.')その後、チュートリアルの後半で作成する個々の投稿を表示する別の関数を追加します。.
...
def individual_post(request):
return HttpResponse('Hi, this is where an individual post will be.')最終的な views.py ファイルは次のようになります。.
from django.http import HttpResponse
from django.shortcuts import render
def index(request):
return HttpResponse('Hello, welcome to the index page.')
def individual_post(request):
return HttpResponse('Hi, this is where an individual post will be.')ファイルの編集が終わったら、必ず保存して終了してください。nanoでは、CtrlキーとXキー、Yキー、Enterキーの順に押してください。.
現時点では、これらの関数が指し示す特定のURLは設定されていないため、URL設定ファイルのURLパターンブロックに追加する必要があります。ビューを追加したら、この設定ファイルを使用してURLをマッピングし、作成したページを表示できるようにしましょう。.
ステップ2 – ビューへのURLを表示する
Djangoを使えば、アプリケーションで使用する独自のURLを設計できます。これは、URLconfまたは「URL設定」ファイルと呼ばれるファイルを使って、純粋なPythonで行います。.
DjangoはWebページを表示するために、まず使用するルートURLconfモジュールを決定し、次にURLパターン(すべてのURLパターンを含むリストデータ構造)を検索する必要があります。Djangoは各URLパターンを反復処理し、最初の一致が見つかるまで処理を続けます。一致が見つかると、Djangoは関連するビューを見つけ、そのビュー関数はURLパターンのデータとHttpRequestオブジェクトを受け取ります。この処理の途中でエラーが発生した場合は、代わりにエラー処理ビューが表示されます。.
このセクションでは、アプリケーションの 2 つの異なるディレクトリにある 2 つの異なる urls.py ファイルを操作します。.
~/my_blog_app/blog/blogsite ディレクトリに移動したら、urls.py ファイル(URLconf ファイルとも呼ばれます)を開いて編集します。ここでは nano を使ってファイルを編集します。.
nano urls.pyurlpatterns のリストを含む以下のファイルのようにファイルを変更します。.
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('post/', views.individual_post, name='individual_post')
]上記の行を追加し終わったら、ファイルを保存して閉じます。.
ブログディレクトリのURLconfファイルを更新する際は、ブログディレクトリのURLconfファイルに追加してください。そうしないと認識されません。これは、設定ファイルでROOT_URLCONFとして設定されているためです。つまり、DjangoはブログディレクトリのURLconfファイルを参照してURLパターンを探します。.
ブログの URLconf をブログの URLconf に含めるには、そのディレクトリに移動する必要があります。.
cd ~/my_blog_app/blog/blogそこに到達したら、nano または任意の別のテキスト エディターを使用して URLconf ファイルを開くことができます。.
nano urls.pyこのファイルでは、次の行を追加して、2 行目に表示されている、先ほど操作した /blogsite/urls.py ファイルを含めます。.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blogsite.urls'))
]ファイルを保存して閉じます。.
ウェブブラウザを開いて、作成したURLにアクセスし、ビューに追加したテキストが表示されることを確認しましょう。Djangoアプリケーションを提供するmanager.pyファイルにアクセスするには、親ディレクトリに移動する必要があります。.
cd ..次のコマンドを実行します。0.0.0.0 は、以下の IP アドレスに置き換えてください。.
python manage.py runserver 0.0.0.0:8000Web ブラウザで、IP アドレス、ポート 8000 に移動します。
your-server-ip:8000次のような Web ページが表示されます。
次に、次のアドレスに移動します。
your-server-ip:8000/post/
ここから次の Web ページが表示されます。
2 つの urls.py ファイルが動作し、データが期待どおりの内容を示していることを確認したので、実際のデータをブログに追加してみましょう。.
ステップ3 – ブログ投稿を作成する
URL パターンとビューの仕組みの基本を理解したので、ブログ投稿を追加して、Python ファイルにコード化したテキストの代わりに Web ページに表示してみましょう。.
先ほど設定した管理ページから投稿を作成します。サーバーがDjangoアプリケーションを稼働させている間に、Webブラウザを使って以下のアドレスにあるブログ管理ページにアクセスしてください。
your-server-ip:8000/admin/blogsite/インターフェースで、[投稿] 行にある [+ 追加] リンクをクリックして、データベースにサンプルのブログ投稿を入力します。.
リンクをクリックすると、以下のような入力フォームが表示されます。
投稿を追加したい場合は、このページにアクセスしてください。または、編集リンクを使って投稿を編集することもできます。.
フォームでは、次のフィールドを編集できます。
- タイトル: ここに希望するブログ投稿のタイトルを追加します (例: My First Blog Post)。.
- SLUG: URLのうち、人間が読めるキーワードを含む有効なウェブアドレス要素を識別する部分を指します。通常はページタイトルから取得されるため、この場合は「my-first-blog-post」を使用します。.
- CONTENT: ブログ投稿の本文です。この例では「Hello, World!」のみを追加しますが、ここでは長文でも構いません。.
- AUTHOR: ここに名前またはユーザー名を入力してください。ここではSamiを使用します。.
テスト目的に応じてブログ投稿フォームに必要事項を入力してください。.
ページにサンプルデータを追加したら、「保存」ボタンをクリックします。次の確認ページが表示されます。
おめでとうございます!最初のブログ投稿を作成しました。
次に、管理インターフェースに入力したデータを含む行が MySQL データベースに追加されたことを確認しましょう。.
ステップ4 – データベースデータの表示
ここでMySQLにアクセスする必要があります。ターミナルでCtrl + Cを押して現在のサーバープロセスを停止し、MySQLインタープリターを起動してください。Djangoアプリケーションデータベースのユーザーはdjangouserですが、プロジェクトに適したユーザーを使用してください。.
mysql -u djangouserMySQL プロンプトが表示されたら、blog_data データベース (またはプロジェクトに適したデータベース) に移動します。
use blog_data;次に、blogsite_post テーブルの内容を表示します。.
select * from blogsite_post;以下のような出力が得られ、管理インターフェースに追加した情報が表示されます。.
Output
+----+--------------------+--------------------+---------------+----------------------------+--------+
| id | title | slug | content | created_on | author |
+----+--------------------+--------------------+---------------+----------------------------+--------+
| 1 | My First Blog Post | my-first-blog-post | Hello, World! | 2020-05-14 00:30:03.186564 | Sammy |
+----+--------------------+--------------------+---------------+----------------------------+--------+
1 row in set (0.00 sec)出力結果に示されているように、追加した投稿データを含む行があります。このデータを投稿のビュー関数で参照してみましょう。MySQLインタープリターを終了するには、Ctrl + Dを押してください。.
サイトのブログ アプリケーション内の views.py ファイルの場所に移動します。.
cd ~/my_blog_app/blog/blogsite次にファイルを開いて、新しい情報を追加します。.
nano views.py以下のようにファイルを編集します。.
from django.shortcuts import render
from django.http import HttpResponse
from .models import Post
def index(request):
return HttpResponse('Hello, welcome to the index page.')
def individual_post(request):
recent_post = Post.objects.get(id__exact=1)
return HttpResponse(recent_post.title + ': ' + recent_post.content)上記のコードでは、Postのインポート文を追加しました。また、HttpResponseから引用符で囲まれた文字列を削除し、ブログ投稿データに置き換えました。特定のオブジェクトのデータを参照するには、表示したいオブジェクトに関連付けられたブログ投稿IDを使用し、そのIDをlast_postという変数に格納します。その後、フィールドの末尾にドット区切りを追加することで、そのオブジェクトから特定のフィールドを取得できます。.
ファイルを保存して閉じた後、manager.py ファイルの場所に移動して Django アプリケーションを実行します。.
cd ~/my_blog_app/blog
python manage.py runserver 0.0.0.0:8000Web ブラウザから次のアドレスにアクセスします。
your-server-ip:8000/post/
ここで、変更内容を確認できます。ページは次のようになり、投稿に追加したテキストが表示されます。.
ページの検査が完了したら、ターミナルで CTRL + C を押して実行プロセスを停止します。.
開発環境を無効にするには、disable コマンドを入力してサーバーからログアウトします。.
結果
このチュートリアルでは、ビューを作成し、URL パターンをマッピングし、ブログ投稿データベースから Web ページにテキストを表示しました。.
次のチュートリアルでは、HTMLを使ってより美しいDjangoテンプレートを作成する方法を説明します。これまでこのシリーズでは、Djangoのモデルとビューについて説明してきました。テンプレートは、Djangoアプリケーションの基盤となる最後の重要な部分です。.
















