0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

`request.GET` と `self.request.GET` の使い分けを理解する

Last updated at Posted at 2025-01-17

request.GETself.request.GETの使い分け

関数ベースビュー(Function-Based View, FBV)

関数ベースビューでは、ビュー関数が引数として request オブジェクトを受け取ります。クエリパラメータにアクセスする場合は、request.GET を使用します。

def my_view(request):
    name = request.GET.get('name')  # FBVではrequest.GETを使う

クラスベースビュー(Class-Based View, CBV)

クラスベースビューでは、self.request がクラスのインスタンス変数として設定されます。クラス内のメソッドからクエリパラメータにアクセスする際は、self.request.GET を使います。

from django.views.generic import ListView

class MyListView(ListView):
    def get(self, request, *args, **kwargs):
        name = self.request.GET.get('name')  # CBVではself.request.GETを使う

一貫性の観点から

クラスベースビューでのコードを一貫性のある形で書くには、self.request.GET の使用が望ましいかも?これによりクラス内のどのメソッドからでも同じ方法でリクエストオブジェクトにアクセスでき、コードの可読性やメンテナンス性が向上します。

実際の例

私の実務のコードでは、クラスベースビュー内で request.GET ではなく self.request.GET を使用しています。

class ContractsListView(LoginRequiredMixin, OrderedListMixin, ListView):

    def get(self, request, *args, **kwargs):
        if not self.request.GET:  # ここ!! if not request.GET とも書けてしまう
            contract_search_data = self.request.session.get('contract_search_data', None)

このようにすることで、クラスベースビュー全体でリクエストオブジェクトへのアクセス方法が統一され、コードの可読性と保守性が向上します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?