この記事では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
https://www.django-rest-framework.org/api-guide/requests/#query_paramsrequest.query_params
instead of the Django’s standardrequest.GET
.
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
(またはPUT
やPATCH
)した場合、パラメータの取得方法は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
(またはPUT
やPATCH
)されたときに使います。
辞書形式で格納されています。
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)
コメント