Python Django-如何为GET请求创建/应用序列化程序?

Python Django-如何为GET请求创建/应用序列化程序?,python,django,Python,Django,通常,我会这样做以获取请求参数 name_input = request.GET.get("name",None) 但是,我只想限制stringvalue或intvalue。此外,为了避免参数被发送为空,如下所示: http://url?name=&age=12 如果我可以为GET请求应用serializer,我想这些问题可能会得到解决。但是我不知道怎么做。创建一个包含两个(或更多)字段的序列化程序 然后通过将数据按如下方式传递到序列化程序来验证查询参数 seri

通常,我会这样做以获取请求参数

name_input = request.GET.get("name",None)
但是,我只想限制
string
value或
int
value。此外,为了避免参数被发送为空,如下所示:

http://url?name=&age=12

如果我可以为
GET
请求应用
serializer
,我想这些问题可能会得到解决。但是我不知道怎么做。

创建一个包含两个(或更多)字段的序列化程序

然后通过将数据按如下方式传递到序列化程序来验证查询参数

serializer = QueryPramSerializer(data=request.GET)
serializer.is_valid(True)
print(serializer.validated_data)
serializer=QueryPramSerializer(data=request.GET)
序列化程序。是否有效(True)
打印(序列化程序。已验证的\u数据)

我假设您正在使用DRF,如果是这样,您可以使用而不是
请求。获取
您可以使用请求参数尝试此DRF
:

型号

from django.db import models
from django.utils.translation import gettext as _


class Person(models.Model):
  name = models.CharField(_("Name"), max_length=50, unique=True)
  age = models.IntegerField(_("Age"))
from .models import  Person


  class PersonSerializer(serializers.Serializer):
        name = serializers.CharField()
        age = serializers.IntegerField()
       class Meta:
           model = Person
from .models import  Person
from .serializers import PersonSerializer
from rest_framework import generics


class PersionList(generics.ListAPIView):
    serializer_class = PersonSerializer

    def get_queryset(self):

        queryset = Person.objects.all()
        name = self.request.query_params.get('name', None)
        age = self.request.query_params.get('age', None)

        if name is not None:
            queryset = queryset.filter(name__icontains=name)
        if age is not  None:
             queryset = queryset.filter(age__in=age)
        return queryset
序列化程序

from django.db import models
from django.utils.translation import gettext as _


class Person(models.Model):
  name = models.CharField(_("Name"), max_length=50, unique=True)
  age = models.IntegerField(_("Age"))
from .models import  Person


  class PersonSerializer(serializers.Serializer):
        name = serializers.CharField()
        age = serializers.IntegerField()
       class Meta:
           model = Person
from .models import  Person
from .serializers import PersonSerializer
from rest_framework import generics


class PersionList(generics.ListAPIView):
    serializer_class = PersonSerializer

    def get_queryset(self):

        queryset = Person.objects.all()
        name = self.request.query_params.get('name', None)
        age = self.request.query_params.get('age', None)

        if name is not None:
            queryset = queryset.filter(name__icontains=name)
        if age is not  None:
             queryset = queryset.filter(age__in=age)
        return queryset
视图

from django.db import models
from django.utils.translation import gettext as _


class Person(models.Model):
  name = models.CharField(_("Name"), max_length=50, unique=True)
  age = models.IntegerField(_("Age"))
from .models import  Person


  class PersonSerializer(serializers.Serializer):
        name = serializers.CharField()
        age = serializers.IntegerField()
       class Meta:
           model = Person
from .models import  Person
from .serializers import PersonSerializer
from rest_framework import generics


class PersionList(generics.ListAPIView):
    serializer_class = PersonSerializer

    def get_queryset(self):

        queryset = Person.objects.all()
        name = self.request.query_params.get('name', None)
        age = self.request.query_params.get('age', None)

        if name is not None:
            queryset = queryset.filter(name__icontains=name)
        if age is not  None:
             queryset = queryset.filter(age__in=age)
        return queryset