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