gpt4 book ai didi

python - 如何验证 DRF (Django Rest Framework) generic.ListView 中的 url 变量?

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:07 24 4
gpt4 key购买 nike

我想在 DRF generic.ListView 中为我的查询集使用 url 变量,但无论如何我都可以验证这一点,现在我想知道如何验证这一点

我编写了以下代码,但它不起作用。

class VideoView(generics.ListAPIView):
def validate(self):
print("ejra")
if "class" not in self.request.GET:
return Response({"error": "class should exist"}, status=status.HTTP_400_BAD_REQUEST)
if len(Class.objects.filter(pk=self.request.GET["class"])) < 1:
return Response({"error": "class not found"}, status=status.HTTP_400_BAD_REQUEST)

def get_queryset(self):
self.validate()
class_obj = Class.objects.get(pk=self.request.GET["class"])
queryset = Video.objects.filter(study_class=class_obj).order_by("-date")
return queryset

serializer_class = VideoSerializer

最佳答案

您可以从 validate() 方法本身引发 DRF API ValidationError

<b>from rest_framework.exceptions import ValidationError</b>


class VideoView(generics.ListAPIView):
serializer_class = VideoSerializer

def validate(self):
if "class" not in self.request.GET:
<b> raise ValidationError({"error": "class should exist"})
if Class.objects.filter(pk=self.request.GET["class"]).exists():
raise ValidationError({"error": "class not found"})</b>

def get_queryset(self):
self.validate()
class_obj = Class.objects.get(pk=self.request.GET["class"])
queryset = Video.objects.filter(study_class=class_obj).order_by("-date")
return queryset
<小时/>

注释

  1. 使用DRF ValidationError()引发错误的异常
  2. 使用Django Queryset's exists()方法来检查是否有任何对象。
  3. 永远不会使用len()函数来检查count() Django 查询集,这是一个非常非常糟糕的做法。

关于python - 如何验证 DRF (Django Rest Framework) generic.ListView 中的 url 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56190549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com