Djangoビューを作成する方法

前書き

Django Developmentシリーズを実行すると、管理者権限を持つユーザーがDjangoの管理UIダッシュボードを介してcommentspostsを追加できる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がurlpatternsblogディレクトリの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ページが表示されます。

Django Initial Index Page

次に、次のURLに移動します。

your-server-ip:8000/post/

ここから、次が表示されるはずです。

Django Initial Post Page

これで、2つのurls.pyファイルが機能することを確認しました。データは、期待どおりの結果を示しています。 これで、実際のデータをブログに追加してみましょう。

[[step-3 -—- create-a-blogpost]] ==ステップ3—ブログ投稿を作成する

URLのパターンとビューの基本を理解したら、次はブログ投稿を追加して、Pythonファイルにハードコーディングしたテキストの代わりにウェブページに表示するようにします。

作成した管理ページから投稿を作成します。 サーバーがDjangoアプリを提供している状態で、Webブラウザーを使用して次の管理者Blogsiteページに移動します。

your-server-ip:8000/admin/blogsite/

インターフェイスで、Posts行にある+ Addリンクをクリックして、サンプルのブログ投稿をデータベースに入力し始めます。

Django Blogsite Admin Page

リンクをクリックすると、次のような入力フォームが表示されます。

Django Add Post Form

投稿を追加するときはいつでも、このページにアクセスして追加します。 または、Changeリンクを使用して投稿を編集することもできます。

フォームには、次のフィールドが表示されます。

フィールド コンテンツ

Title

ここに、My First Blog Postなどの目的のブログ投稿タイトルを追加します。

Slug

これは、人間が読めるキーワードで有効なWebアドレス要素を識別するURLの部分を指します。 これは通常、ページのタイトルから派生するため、この場合はmy-first-blog-postを使用できます。

Content

これはあなたのブログ投稿の本文です。 例としてHello, World!を追加するだけですが、ここで詳細に説明できます。

Author

このフィールドに、関連する名前またはユーザー名を追加します。 Sammyを使用します。

テストの目的に合ったブログ投稿フォームに記入します。

Django Filled Out Blog Post Form

サンプルデータをページに追加したら、SAVEボタンをクリックします。 次の確認ページが表示されます。

Django Post Submission Successful

おめでとうございます。 最初のブログ投稿を作成しました!

次に、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)

上記のコードでは、Postimportステートメントを追加しました。 また、引用符で囲まれた文字列を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/

ここで、行った変更が表示されます。ページは次のようになり、投稿に追加したテキストが表示されます。

Django Served Blog Post

ページの検査が終了したら、ターミナルでCTRL + Cを押して、プロセスの実行を停止します。

プログラミング環境を非アクティブ化するには、deactivateコマンドを入力して、サーバーを終了します。

結論

このチュートリアルでは、ブログ投稿データベースからビューを作成し、URLパターンをマップし、Webページにテキストを表示しました。

次のチュートリアルでは、HTMLを使用してDjangotemplatesを作成することにより、これを実際に見た目に美しくする方法について説明します。 これまでのところ、このシリーズではDjangoモデルとDjangoビューについて説明しました。 テンプレートは、Djangoアプリケーションの基盤となる最後の重要な部分です。

Related