【Django】ビュー(views.py):初心者向けに5ステップで解説 |
您所在的位置:网站首页 › Django150改装 › 【Django】ビュー(views.py):初心者向けに5ステップで解説 |
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レスポンスを返すことです。 ![]() 参考 HTTPリクエスト/HTTPレスポンスとは? このレスポンスは通常、HTML形式のWebページですが、JSON形式のデータや、リダイレクト、404エラーなど、他の任意の形式のレスポンスも可能です。 ![]() ビューはviews.pyという名前のPythonファイルに定義されます。このファイルはDjangoアプリケーションを作成した際に自動的にディレクトリ内に保存されます。 ![]() ビューの基本的な作成方法は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:ListViewListViewは、あるモデルのオブジェクトのリストを表示するためのビューです。デフォルトでは、これは全てのオブジェクトを取得しますが、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:DetailViewDetailViewは、単一のオブジェクトの詳細を表示するためのビューです。 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:CreateViewCreateViewは、新たなオブジェクトを作成するためのビューです。 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:UpdateViewUpdateViewは、既存のオブジェクトを更新するためのビューです。 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:DeleteViewDeleteViewは、既存のオブジェクトを削除するためのビューです。 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 |