前書き
Django Developmentシリーズを実行すると、管理者権限を持つユーザーがDjangoの管理UIダッシュボードを介してcommentsとpostsを追加できるDjangoアプリケーションが正常に作成されました。 また、MySQLとDjangoのオブジェクトリレーショナルマッピングソリューションmodelsを活用して、データの永続性を設定しました。
このチュートリアルでは、WebアプリケーションがWeb要求を適切に処理し、必要なWeb応答を返すことができるようにするDjangoviewsを作成します。 Django docsで定義されているように、Web応答は、WebページのHTMLコンテンツ、リダイレクト、またはHTTPエラー(例: 404
)。 ビュー関数のコードは、Pythonパスにある限り、技術的にプロジェクトのどこにでも存在できます。 ただし、これらのビュー関数が存在するファイルの命名と配置にはいくつかの一般的な規則があり、これらのプラクティスに従います。
このチュートリアルの手順を完了すると、Djangoブログサイトが最近の投稿をyour-IP-or-domain/post
のURLにプルします。
前提条件
このチュートリアルは、Django Developmentシリーズの一部です。 このチュートリアルの正確な技術設定を完了するには、次のことを行っておく必要があります。
ただし、既存のDjangoのセットアップがある場合は、Djangoビューを実装する方法を理解するために従うことができます。
[[step-1 -—- create-view-functions]] ==ステップ1—ビュー関数を作成する
Ubuntuサーバーターミナル内で、まず関連するディレクトリに移動し、Python仮想環境をアクティブにする必要があります。
cd ~/my_blog_app
. env/bin/activate
仮想環境がアクティブ化されたので、blogsite
ディレクトリに移動して、Pythonファイルを開き、最初のビューfunctionを作成します。
cd ~/my_blog_app/blog/blogsite
nanoまたは任意のテキストエディターを使用して、ビューファイルを編集用に開きます。
nano views.py
ファイルを開くと、次のようなコードが表示されます。
/my_blog_app/blog/blogsite/views.py
from django.shortcuts import render
# Create your views here.
django.shortcuts
ライブラリからrender()
関数をインポートするimport statementを保持します。 render()
functionを使用すると、テンプレートとコンテキストの両方を組み合わせて、適切なHttpResponse
オブジェクトを返すことができます。 私たちが書くすべてのビューで、HttpResponse
をインスタンス化し、入力し、返す責任があるので、これを覚えておいてください。
次に、ユーザーをインデックスページに表示する最初のビューを追加します。 HttpResponse()
関数をDjangohttp
ライブラリからインポートします。 その関数を使用して、ウェブページがリクエストされたときに表示されるテキストを渡します。
~/my_blog_app/blog/blogsite/views.py
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello, welcome to the index page.')
その後、チュートリアルの後半で作成する個々の投稿を表示する機能をもう1つ追加します。
~/my_blog_app/blog/blogsite/views.py
...
def individual_post(request):
return HttpResponse('Hi, this is where an individual post will be.')
最終的なviews.py
ファイルは次のようになります。
~/my_blog_app/blog/blogsite/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.')
ファイルの編集が終了したら、必ず保存して終了してください。
現在、これらの関数が指している指定されたURLはないため、URL構成ファイル内のurlpatterns
ブロックに追加する必要があります。 ビューを追加したら、作成したページを表示できるように、この設定ファイルを使用してURLをビューにマッピングします。
[[step-2 -—- map-urls-to-views]] ==ステップ2—URLをビューにマップする
Djangoは、アプリで使用する独自のURLを設計するのに比較的便利です。 これは、一般にURLconfまたは「URL構成」ファイルと呼ばれるファイルを使用して、純粋なPythonで実行されます。
Webページを表示するには、Djangoは最初に使用するルートURLconf
モジュールを決定する必要があり、次にすべてのURLパターンを含むurlpatterns
であるurlpatterns
を探します。 Djangoは、一致する最初のURLパターンが見つかるまで、各URLパターンを調べます。 一致するものが見つかると、Djangoは関連するビューを見つけ、そのビュー関数はURLパターンとHttpRequest
オブジェクトに関連するデータを受け取ります。 このプロセス全体のいずれかの時点で障害が発生した場合は、代わりにerror-handling viewが表示されます。
~/my_blog_app/blog/blogsite
ディレクトリにいる間に、urls.py
ファイル(URLconfファイルとも呼ばれます)を開いて編集します。 ここではnanoを使用してファイルを編集します。
nano urls.py
以下に示すように、urlpatterns
リストを使用して、ファイルを次のように正確に変更します。
~/my_blog_app/blog/blogsite/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('post/', views.individual_post, name='individual_post')
]
上記の行の追加が終了したら、ファイルを保存して閉じます。
blogsite
ディレクトリのURLconfファイルを更新したら、それをblog
ディレクトリのURLconfに含める必要があります。そうしないと、認識されません。 設定ファイルでROOT_URLCONF
として設定されているため、これを行う必要があります。 これは、Djangoがurlpatterns
のblog
ディレクトリのURLconfを調べていることを意味します。
blog
URLconf内にblogsite
URLconfを含めるには、そのディレクトリに移動する必要があります。
cd ~/my_blog_app/blog/blog
そこに来たら、nanoまたは選択した別のテキストエディターでURLconfファイルを開くことができます。
nano urls.py
このファイル内に、次の行を追加して、処理したばかりの/blogsite/urls.py
ファイルを含めます。これは2行目に示されています。
~/my_blog_app/blog/blog/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blogsite.urls'))
]
ファイルを保存して閉じます。
次に、作成したURLに移動して、ビューに追加したテキストが表示されていることを確認するために、Webブラウザーを開きます。 Djangoアプリを提供するmanage.py
ファイルにアクセスするには、親ディレクトリに移動する必要があります。
cd ..
以下のIPアドレスを置き換えて、次のコマンドを発行します。
python manage.py runserver your-server-ip:8000
Webブラウザー内で、次のURLに移動します。
your-server-ip:8000
次のようなWebページが表示されます。
次に、次のURLに移動します。
your-server-ip:8000/post/
ここから、次が表示されるはずです。
これで、2つのurls.py
ファイルが機能することを確認しました。データは、期待どおりの結果を示しています。 これで、実際のデータをブログに追加してみましょう。
[[step-3 -—- create-a-blogpost]] ==ステップ3—ブログ投稿を作成する
URLのパターンとビューの基本を理解したら、次はブログ投稿を追加して、Pythonファイルにハードコーディングしたテキストの代わりにウェブページに表示するようにします。
作成した管理ページから投稿を作成します。 サーバーがDjangoアプリを提供している状態で、Webブラウザーを使用して次の管理者Blogsite
ページに移動します。
your-server-ip:8000/admin/blogsite/
インターフェイスで、Posts
行にある+ Add
リンクをクリックして、サンプルのブログ投稿をデータベースに入力し始めます。
リンクをクリックすると、次のような入力フォームが表示されます。
投稿を追加するときはいつでも、このページにアクセスして追加します。 または、Change
リンクを使用して投稿を編集することもできます。
フォームには、次のフィールドが表示されます。
フィールド | コンテンツ |
---|---|
|
ここに、 |
|
これは、人間が読めるキーワードで有効なWebアドレス要素を識別するURLの部分を指します。 これは通常、ページのタイトルから派生するため、この場合は |
|
これはあなたのブログ投稿の本文です。 例として |
|
このフィールドに、関連する名前またはユーザー名を追加します。 |
テストの目的に合ったブログ投稿フォームに記入します。
サンプルデータをページに追加したら、SAVE
ボタンをクリックします。 次の確認ページが表示されます。
おめでとうございます。 最初のブログ投稿を作成しました!
次に、MySQLデータベースに追加したデータを含む行が追加されたことを確認します。
[[step-4 -—- display-database-data]] ==ステップ4—データベースデータを表示する
この時点で、MySQLに移行する必要があるため、CTRL + C
と入力してターミナル経由で現在のサーバープロセスを停止し、MySQLインタープリターを開きます。
mysql -u root
MySQLプロンプトが表示されたら、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! | 2018-04-24 17:10:00.139735 | Sammy |
+----+--------------------+--------------------+---------------+----------------------------+--------+
1 row in set (0.00 sec)
出力に示されているように、追加した投稿のデータを含む行があります。 次に、このデータを投稿の表示機能に参照しましょう。 CTRL + D
を使用してMySQLインタープリターを終了します。
blogsite
アプリ内のviews.py
ファイルの場所に移動します。
cd ~/my_blog_app/blog/blogsite
ファイルを開いて、新しいデータを含めることができます。
nano views.py
ファイルを編集して、次のように表示されるようにします。
~/my_blog_app/blog/blogsite
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
にimport
ステートメントを追加しました。 また、引用符で囲まれた文字列をHttpResponse
から削除し、ブログ投稿のデータに置き換えました。 特定のオブジェクトのデータを参照するために、表示するオブジェクトに関連付けられたブログ投稿IDを使用し、そのIDをrecent_post
という変数に格納しています。 その後、フィールドにピリオド区切り文字を追加することにより、そのオブジェクトの特定のフィールドを取得できます。
ファイルを保存して閉じたら、manage.py
ファイルの場所に移動してDjangoアプリを実行します。
cd ~/my_blog_app/blog
python manage.py runserver your-server-ip:8000/post/
Webブラウザーから、次のアドレスに移動します。
your-server-ip:8000/post/
ここで、行った変更が表示されます。ページは次のようになり、投稿に追加したテキストが表示されます。
ページの検査が終了したら、ターミナルでCTRL + C
を押して、プロセスの実行を停止します。
プログラミング環境を非アクティブ化するには、deactivate
コマンドを入力して、サーバーを終了します。
結論
このチュートリアルでは、ブログ投稿データベースからビューを作成し、URLパターンをマップし、Webページにテキストを表示しました。
次のチュートリアルでは、HTMLを使用してDjangotemplatesを作成することにより、これを実際に見た目に美しくする方法について説明します。 これまでのところ、このシリーズではDjangoモデルとDjangoビューについて説明しました。 テンプレートは、Djangoアプリケーションの基盤となる最後の重要な部分です。