Django REST frameworkでパラメータを取得する

この記事ではDjango REST frameworkが推奨するパラメータの取得方法や、用途によって使用するrequest関数をご紹介します。

目次

GETリクエスト時にパラメータを取得

ajaxでDjango REST frameworkにGETリクエストをした場合、パラメータの取得方法は2つあります。

  • request.GET
  • request.query_params

https://www.django-rest-framework.org/api-guide/requests/#query_params

この2つの動作は同じですが、Django REST frameworkではrequest.query_paramsの使用を推奨しているのでできる限りrequest.query_paramsを使いましょう。

For clarity inside your code, we recommend using request.query_params instead of the Django’s standard request.GET.

https://www.django-rest-framework.org/api-guide/requests/#query_params

request.query_paramsにはGETリクエストだけでなくクエリパラメータが含まれる場合があります。

from rest_framework import viewsets, generics, status
from rest_framework.response import Response
from apps.products.models import Product


class ProductViewSet(viewsets.ModelViewSet):
    def list(self, request):
          products = Product.objects.filter(
              name__icontains=request.query_params.get('name')
          )
          ...
          return Response({"products": products}, status=status.HTTP_201_CREATED)

POST時にパラメータを取得

ajaxでDjango REST frameworkにPOST(またはPUTPATCH)した場合、パラメータの取得方法は2つあります。

  • request.POST
  • request.data

https://www.django-rest-framework.org/tutorial/2-requests-and-responses/

request.POST

request.POSTはフォームデータのみのデータが辞書形式で格納されています。

使い方はDjangoと同じです。

from rest_framework import viewsets, generics, status
from rest_framework.response import Response


class ProductViewSet(viewsets.ModelViewSet):
    def create(self, request):
          title = request.POST.get('title')
          ...
          return Response({"title": title}, status=status.HTTP_201_CREATED)

request.data

request.dataはJSONデータPOST(またはPUTPATCH)されたときに使います。

辞書形式で格納されています。

from rest_framework import viewsets, generics, status
from rest_framework.response import Response


class ProductViewSet(viewsets.ModelViewSet):
    def create(self, request):
          data = request.data
          title = data["title"]
          ...
          return Response({"title": title}, status=status.HTTP_201_CREATED)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次