DjangoWeb開発用のビューを作成する方法

提供:Dev Guides
移動先:案内検索

序章

Django Development シリーズをフォローしていれば、管理者権限を持つユーザーがコメント投稿を介して追加できるDjangoアプリケーションを正常に作成できています。 Djangoの管理UIダッシュボード。 また、MySQLとDjangoのオブジェクトリレーショナルマッピングソリューションモデルを活用して、データの永続性を設定しました。

このチュートリアルでは、WebアプリケーションがWeb要求を適切に処理し、必要なWeb応答を返すことができるようにするDjango viewsを作成します。 Django docs で定義されているように、Web応答は、WebページのHTMLコンテンツ、リダイレクト、またはHTTPエラー(例: 404)。 ビュー関数のコードは、Pythonパス上にある限り、技術的にはプロジェクトのどこにでも存在できます。 ただし、これらのビュー関数が存在するファイルに名前を付けて配置するための一般的な規則がいくつかあり、これらの慣例に従います。

このチュートリアルの手順を完了すると、Djangoブログサイトが最近の投稿をyour-IP-or-domain/postURLにプルします。

前提条件

このチュートリアルはDjango開発シリーズの一部であり、そのシリーズの続きです。

このシリーズに従わなかった場合は、次のことを前提としています。

  • Djangoバージョン3以降がインストールされています。
  • Djangoアプリをデータベースに接続しました。 MySQLを使用しています。この接続は、Djangoシリーズのパート2「Djangoアプリを作成してデータベースに接続する方法」に従うことで実現できます。
  • Unixベースのオペレーティングシステム、できればUbuntu 20.04クラウドサーバーを使用しています。これは、私たちがテストしたシステムです。 同様の環境でDjangoをセットアップする場合は、チュートリアル「 Ubuntu20.04でDjangoをインストールして開発環境をセットアップする方法」を参照してください。
  • Django管理インターフェースを設定しました。 これは、DjangoAdminチュートリアルに従って実行できます。

このガイドは主にDjangoビューを扱っているため、設定が多少異なる場合でも従うことができる場合があります。

ステップ1—ビュー関数を作成する

ターミナル内で、最初に関連するディレクトリに移動し、Python仮想環境をアクティブ化する必要があります。 このシリーズを続けている場合は、以下のコマンドを入力できます。 アプリを開発するときは、常にPythonプログラミング環境を使用して、コードが含まれ、適切なセットアップで作業していることを確認することが重要です。

cd ~/my_blog_app
. env/bin/activate

仮想環境がアクティブ化されたので、blogsiteディレクトリに移動して、Pythonファイルを開き、最初のビュー関数を作成します。

cd ~/my_blog_app/blog/blogsite

nanoまたは任意のテキストエディタを使用して、views.pyファイルを開いて編集します。

nano views.py

ファイルを開くと、次のようなコードが入力されているはずです。

/my_blog_app/blog/blogsite/views.py

from django.shortcuts import render

# Create your views here.

django.shortcutsライブラリからrender()関数をインポートするimportステートメントを保持します。 render()関数を使用すると、テンプレートとコンテキストの両方を組み合わせて、適切なHttpResponseオブジェクトを返すことができます。 これを覚えておいてください。私たちが作成するすべてのビューで、HttpResponseのインスタンス化、入力、および戻りを行う責任があります。

次に、ユーザーをインデックスページに歓迎する最初のビューを追加します。 HttpResponse()関数をDjangohttpライブラリからインポートします。 その関数を使用して、Webページが要求されたときに表示されるテキストを渡します。

〜/ 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.')

ファイルの編集が終了したら、必ず保存して終了してください。 nanoでは、CTRLXYENTERの順に押すことができます。

現在、これらの関数が指している指定されたURLはないため、URL構成ファイル内のurlpatternsブロックに追加する必要があります。 ビューを追加したら、この構成ファイルを介してURLをビューにマッピングし、作成したページを表示できるようにします。

ステップ2—URLをビューにマップする

Djangoを使用すると、アプリで使用する独自のURLを設計できます。 これは、一般に[X73X]URLconfまたは「URL構成」ファイルと呼ばれるファイルを使用して純粋なPythonで実行されます。

Webページを表示するには、Djangoは最初に使用するルートURLconfモジュールを決定し、次にリストデータ構造を含むurlpatternsを探します。すべてのURLパターン。 次に、Djangoは、一致する最初のURLパターンが見つかるまで、各URLパターンを調べます。 一致するものが見つかると、Djangoは関連するビューを見つけ、そのビュー関数はURLパターンとHttpRequestオブジェクトに関連するデータを受け取ります。 このプロセスのいずれかの時点で障害が発生した場合は、代わりにエラー処理ビューが表示されます。

このセクションでは、アプリの2つの異なるディレクトリにある2つの異なるurls.pyファイルを操作します。

~/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がblogディレクトリのurlpatternsのURLconfを調べていることを意味します。

blogsiteURLconfをblogURLconfに含めるには、そのディレクトリに移動する必要があります。

cd ~/my_blog_app/blog/blog

そこに着いたら、nanoまたは任意の別のテキストエディタでURLconfファイルを開くことができます。

nano urls.py

このファイル内に、次の行を追加して、2行目に示されている/blogsite/urls.pyファイルを含めます。

〜/ 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 ..

次のコマンドを発行します。 0.0.0.0は以下のIPアドレスに置き換えることができます。

python manage.py runserver 0.0.0.0:8000

Webブラウザー内で、IPアドレス(ポート8000)に移動します。

your-server-ip:8000

次のようなWebページが表示されます。

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

your-server-ip:8000/post/

ここから、次のWebページが表示されます。

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

ステップ3—ブログ投稿を作成する

URLパターンとビューがどのように機能するかの基本を理解したので、ブログ投稿を追加して、Pythonファイルにハードコーディングしたテキストの代わりにそれをWebページに表示させましょう。

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

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

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

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

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

フォームでは、次のフィールドを編集できます。

分野 コンテンツ
Title ここに希望のブログ投稿タイトルを追加します(例:My First Blog Post)。
Slug これは、人間が読めるキーワードで有効なWebアドレス要素を識別するURLの一部を指します。 これは通常、ページのタイトルから派生しているため、この場合はmy-first-blog-postを使用できます。
Content これはあなたのブログ投稿の本文です。 例としてHello, World!を追加するだけですが、ここで詳細に説明できます。
Author このフィールドに、関連する名前またはユーザー名を追加します。 Sammyを使用します。

テスト目的に適していると思われる場合は、ブログ投稿フォームに記入してください。

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

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

次に、管理インターフェースに入力したデータを含む行がMySQLデータベースに追加されていることを確認しましょう。

ステップ4—データベースデータを表示する

この時点で、MySQLに移行する必要があるため、CTRL + Cと入力してターミナル経由で現在のサーバープロセスを停止し、MySQLインタープリターを開きます。 Djangoアプリのデータベースのユーザーはdjangouserですが、プロジェクトには必ず適切なユーザーを使用してください。

mysql -u djangouser

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! | 2020-05-14 00:30:03.186564 | 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 0.0.0.0:8000

Webブラウザーから、次のアドレスに移動します。

your-server-ip:8000/post/

ここでは、行った変更を確認します。 ページはこれに似ており、投稿に追加したテキストが表示されます。

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

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

結論

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

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