【Django】ビュー(views.py):初心者向けに5ステップで解説

您所在的位置:网站首页 Django150改装 【Django】ビュー(views.py):初心者向けに5ステップで解説

【Django】ビュー(views.py):初心者向けに5ステップで解説

2024-07-05 17:03| 来源: 网络整理| 查看: 265

Djangoにおけるビュー(views.py)は、ユーザーからのリクエストを受け取り、それに基づいたレスポンスを生成するコンポーネントです。言い換えると、ユーザーとアプリケーションの間のインターフェースの役割を果たすのがビューです。

この記事では、Djangoのビュー(views.py)について、初心者でも理解できるように詳しく解説します。

具体的には、ビューの基本的な作成方法から、より高度なリストビューやフォームビューの活用方法までを、5つのステップに分けて学んでいきます。

このページで学べる内容 ステップ1:ビューとは ステップ2:関数ベースビューの作成 ステップ3:クラスベースビューの作成 ステップ4:汎用ビューの活用 リストビュー ディテールビュー フォームビュー ステップ5:ビューのテスト方法

Pythonエンジニア/Djangoを利用したWeb開発者を目指す方であれば知らないと恥ずかしい超・基本知識の1つ。是非最後までご覧ください。

スポンサーリンク Djangoのビュー(view)とは?関数ベースビューの作成クラスベースビューの作成クラスベースビューの拡張(汎用ビューの活用)Django:ListViewDjango:DetailViewDjango:CreateViewDjango:UpdateViewDjango:DeleteViewビューのテストステップ1:テストケースの作成ステップ2:テストメソッドの定義ステップ3:ビューのテストDjango:ビュー(views.py)のまとめDjangoのビュー(view)とは?

Djangoにおけるビューは、ユーザーからのリクエストを受け取り、それに基づいたレスポンスを生成するコンポーネントです。つまり、ユーザーとアプリケーションの間のインターフェースの役割を果たします。

ビューはDjangoアプリケーションの中心的な部分であり、その動作を理解することは、Djangoでの開発スキルを向上させるために重要です。

ビューは基本的にPythonの関数またはクラスとして定義されます。その役割はユーザーからのHTTPリクエストを受け取り、HTTPレスポンスを返すことです。

Djangoのビュー図1:Djangoのビュー

参考 HTTPリクエスト/HTTPレスポンスとは?

このレスポンスは通常、HTML形式のWebページですが、JSON形式のデータや、リダイレクト、404エラーなど、他の任意の形式のレスポンスも可能です。

ビューはviews.pyという名前のPythonファイルに定義されます。このファイルはDjangoアプリケーションを作成した際に自動的にディレクトリ内に保存されます。

Django view.py図2:Django view.py

ビューの基本的な作成方法は2つ。1つは関数ベースのビュー、もう1つはクラスベースのビューです。

以下に、関数ベースのビューとクラスベースのビューの特徴と違いを表形式で整理しました。

関数ベースビュークラスベースビュー定義方法Pythonの関数として定義Pythonのクラスとして定義適用範囲小規模なアプリケーションや単純なビュー大規模なアプリケーションや複雑なビュー特徴シンプルで直感的な構造再利用性と拡張性が高いメソッドHTTPメソッド(GET, POSTなど)ごとに条件分岐が必要HTTPメソッドごとに異なるメソッド(get(), post()など)を定義できるミックスイン使用不可使用可能(複数のビヘイビアを組み合わせることが可能)例def hello_world(request): return HttpResponse("Hello, World!")class HelloWorldView(TemplateView): template_name = "hello_world.html"

関数ベースのビューはそのシンプルさから理解しやすく、小規模なアプリケーションや単純なビューの作成に適しています。一方、クラスベースのビューは再利用性と拡張性が高く、大規模なアプリケーションや複雑なビューの作成に適しているのが特徴。

それぞれの作成方法について次の章で解説していきます。Djangoのビューについてさらに深掘りしていきましょう。

関数ベースビューの作成

関数ベースのビューは、Pythonの関数として定義され、1つのHTTPリクエストに対して1つのHTTPレスポンスを返します。

この関数は、リクエストを引数として受け取り、レスポンスを戻り値として返します。

早速、具体的なコードを見てみましょう。以下は、最も基本的な関数ベースのビューの例です。

from django.http import HttpResponse def hello_world(request): return HttpResponse("Hello, World!")

参考 import文 / def文

このコードは、hello_worldという名前のビューを定義。このビューは、HTTPリクエストを受け取り、"Hello, World!"というテキストを含むHTTPレスポンスを返します。

関数ベースのビューは、そのシンプルさから、小規模なアプリケーションや単純なビューの作成に適しています。しかし、大規模なアプリケーションや複雑なビューを作成する場合には、クラスベースのビューを使用することが推奨されます。

先ほどのビューをDjangoアプリケーションで使用するには、URLconf(URL設定)にこのビューを追加する必要があります。

URLconfは、URLとビューをマッピングするための設定で、urls.pyという名前のPythonファイルに定義されます。以下は、先ほど定義したhello_worldビューをURLconfに追加する例です。

from django.urls import path from .views import hello_world urlpatterns = [ path('hello/', hello_world), ]

例えば、あなたがローカル環境でDjangoアプリケーションを実行しているとします。通常、ローカル環境でDjangoアプリケーションを実行すると、http://127.0.0.1:8000/またはhttp://localhost:8000/というURLでアクセスできます。

このとき、hello_worldビューを/hello/というURLにマッピングした場合、http://127.0.0.1:8000/hello/またはhttp://localhost:8000/hello/というURLにアクセスすると、"Hello, World!"というテキストが表示されます。

クラスベースビューの作成

関数ベースのビューがシンプルで直感的な一方で、クラスベースのビューはその再利用性と拡張性から、より大規模なアプリケーションや複雑なビューの作成に適しています。

クラスベースのビューはPythonのクラスとして定義され、Djangoが提供するビューの親クラスを継承して作成します。

早速、こちらも具体的なコードを見てみましょう。以下は、最も基本的なクラスベースのビューの例です。

from django.views.generic import TemplateView class HelloWorldView(TemplateView): template_name = "hello_world.html"

参考 class文 / 変数の基本

このコードは、HelloWorldViewという名前のビューを定義。このビューは、TemplateViewというDjangoが提供するビューの親クラスを継承しており、hello_world.htmlというテンプレートを使用してHTTPレスポンスを生成します。

このビューをDjangoアプリケーションで使用するには、関数ベースのビューと同様に、URLconfにこのビューを追加する必要があります。

ただし、クラスベースのビューをURLconfに追加するときには、ビューのクラス名にas_view()メソッドを追加する必要があります。以下は、先ほど定義したHelloWorldViewビューをURLconfに追加する例です。

from django.urls import path from .views import HelloWorldView urlpatterns = [ path('hello/', HelloWorldView.as_view()), ]

このコードは、/hello/というURLがリクエストされたときに、HelloWorldViewビューが呼び出されるように設定しています。つまり、ユーザーがhttp://127.0.0.1:8000/hello/またはhttp://localhost:8000/hello/というURLにアクセスすると、hello_world.htmlというテンプレートが表示されます。

関数ベースビュークラスベースビュー定義方法Pythonの関数として定義Pythonのクラスとして定義適用範囲小規模なアプリケーションや単純なビュー大規模なアプリケーションや複雑なビュー特徴シンプルで直感的な構造再利用性と拡張性が高いメソッドHTTPメソッド(GET, POSTなど)ごとに条件分岐が必要HTTPメソッドごとに異なるメソッド(get(), post()など)を定義できるミックスイン使用不可使用可能(複数のビヘイビアを組み合わせることが可能)例def hello_world(request): return HttpResponse("Hello, World!")class HelloWorldView(TemplateView): template_name = "hello_world.html"

以上が、クラスベースのビューの基本的な作成方法とその使用方法です。次の章では、クラスベースのビューをさらに拡張する方法について解説します。

クラスベースビューの拡張(汎用ビューの活用)

クラスベースのビューは、その再利用性と拡張性から、より大規模なアプリケーションや複雑なビューの作成に適しています。

Djangoの汎用ビュー(Generic Views)は、一般的なWeb開発タスクを簡単に行うための、多くの組み込みビューを提供しています。これらのビューは、クラスベースのビューを拡張して作成されています。汎用ビューを使用すると、特定のタスクを実行するためのコードを大幅に減らすことができます。

たとえば、Djangoには、データベースからオブジェクトを取得して表示するためのListView、新しいオブジェクトを作成するためのCreateView、既存のオブジェクトを更新するためのUpdateView、オブジェクトを削除するためのDeleteViewなど、多くの汎用ビューがあります。

Django:ListView

ListViewは、あるモデルのオブジェクトのリストを表示するためのビューです。デフォルトでは、これは全てのオブジェクトを取得しますが、get_querysetメソッドをオーバーライドすることでカスタマイズできます。

from django.views.generic import ListView from .models import Book class BookListView(ListView): model = Book template_name = 'books/book_list.html' # /_.html

このビューは、Bookモデルの全インスタンスをリストで表示するビューです。template_nameで指定されたテンプレートを用いて表示します。ここでは books/book_list.html と指定しています。

参考 Djangoのモデル

Django:DetailView

DetailViewは、単一のオブジェクトの詳細を表示するためのビューです。

from django.views.generic import DetailView from .models import Book class BookDetailView(DetailView): model = Book template_name = 'books/book_detail.html' # /_.html

このビューは、Bookモデルの単一のインスタンス(=レコード)の詳細を表示するビューです。具体的なインスタンスはURLから取得されます(一般的にはプライマリキー)。

Django:CreateView

CreateViewは、新たなオブジェクトを作成するためのビューです。

from django.views.generic.edit import CreateView from .models import Book class BookCreateView(CreateView): model = Book fields = ['name', 'author', 'price'] # ここにモデルのフィールドを記述 template_name = 'books/book_form.html' # /_.html

このビューは、新しいBookインスタンスを作成するためのフォームを表示し、そのフォームの送信を処理するビューです。ここでfieldsはフォームに表示するフィールドを指定します。

Django:UpdateView

UpdateViewは、既存のオブジェクトを更新するためのビューです。

from django.views.generic.edit import UpdateView from .models import Book class BookUpdateView(UpdateView): model = Book fields = ['name', 'author', 'price'] template_name = 'books/book_form.html' # /_.html

このビューは、既存のBookインスタンスを更新するためのフォームを表示し、そのフォームの送信を処理します。編集するインスタンスはURLから取得されます。

Django:DeleteView

DeleteViewは、既存のオブジェクトを削除するためのビューです。

from django.views.generic.edit import DeleteView from .models import Book class BookDeleteView(DeleteView): model = Book template_name = 'books/book_confirm_delete.html' # /_.html success_url = '/' # 削除後にリダイレクトするURL

このビューは、既存のBookインスタンスを削除するための確認ページを表示し、その削除を処理します。削除するインスタンスはURLから取得されます。削除が成功した後はsuccess_urlで指定したURLにリダイレクトされます。

以上が、Djangoの汎用ビューの基本的な活用方法とその使用方法です。このように、汎用ビューを使用すると、一般的なWeb開発タスクを簡単に行うことができます。

ビューのテスト

最後に、作成したビューを簡単にテストする方法をご紹介します。

Djangoビューのテストは、アプリケーションの品質を確保するために重要なステップです。テストを行うことで、ビューが期待通りに動作することを確認し、エラーやバグを早期に発見することが可能に。

Djangoはビューのテストを支援するための強力なツールを提供しており、それはdjango.testモジュールのTestCaseクラスという形で用意されています。

我々はこのクラスをうまく使用することで、簡単にビューのテストを行うことができます。

以下に、ビューのテストの基本的な手順を示します。

ステップ1:テストケースの作成

まず、django.test.TestCaseを継承したクラスを作成します。このクラス内にテストメソッドを定義します。

from django.test import TestCase class MyViewTest(TestCase): ... ステップ2:テストメソッドの定義

次に、テストケースクラス内にテストメソッドを定義します。テストメソッドの名前はtest_で始まる必要があります。

def test_my_view(self): ... ステップ3:ビューのテスト

最後に、TestCaseクラスのclient属性を使用して、ビューにリクエストを送信し、レスポンスを検証します。

response = self.client.get('/my-view-url/') self.assertEqual(response.status_code, 200)

このコードは、/my-view-url/にGETリクエストを送信し、レスポンスのステータスコードが200(成功)であることを確認しています。

以上が、Djangoのビューのテストの基本的な手順です。このように、Djangoのテストフレームワークを使用すると、ビューのテストを簡単に行うことができます。

Django:ビュー(views.py)のまとめ ビューの基本: Djangoのビューは、ユーザーからのリクエストを受け取り、レスポンスを生成する役割を果たします。ビューは関数またはクラスとして定義されます。 関数ベースビュー: 関数ベースビューは、シンプルで直感的なビューの作成方法です。一つの関数が一つのビューを表します。 クラスベースビュー: クラスベースビューは、より複雑なビューの作成やコードの再利用を可能にします。ビューの振る舞いをカスタマイズするために、クラスの継承やミックスインを利用できます。 汎用ビュー: Djangoは、一般的なウェブ開発タスクを簡単に行うための汎用ビューを提供しています。これらは、リストビュー、ディティールビュー、フォームビューなど、特定の用途に最適化されたクラスベースビューです。 ビューのテスト: Djangoのテストフレームワークを使用して、ビューの動作を確認するテストを作成できます。これにより、コードの品質を保証し、バグを早期に発見できます。

初めてPythonを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。

Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!

【無料】プログラミングスクールの探し方 >

読者料典 Python入門:学習カリキュラム ←こちらから!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3