python - Django - 我如何返回 json 响应错误?
问题描述
我使用 Django Rest Framework 创建了一个简单的 API 端点,并创建了一个非常基本的逻辑,如果用户不提供任何过滤器,API 需要返回一个自定义错误,例如{'error': 'no parameter provided'}
. 我的代码的问题是我不断收到此错误:object of type 'JsonResponse' has no len()
.
这是我的代码:
class WS_View(viewsets.ModelViewSet):
pagination_class = StandardResultsSetPagination
http_method_names = ['get']
serializer_class = WS_Serializer
def get_queryset(self):
valid_filters = {
...
}
filters = {valid_filters[key]: value for key, value in self.request.query_params.items() if key in valid_filters.keys()}
#If there are filters, execute the query
if len(filters) > 0:
queryset = WS.objects.filter(**filters)
return queryset
#If there isn't any filter, return an error
else:
return JsonResponse({"error": "no parameter required"})
现在我知道我收到了这个错误,因为我应该返回一个查询集,而 JsonResponse 当然不是查询集,但我不知道如何实际解决这个问题。任何建议表示赞赏!
解决方案
正如您已经意识到的那样,get_queryset 期望(正如其名称所暗示的)一个查询集。所以解决方案是在这里提出一个异常:
from rest_framework.exceptions import NotFound
class WS_View(viewsets.ModelViewSet):
#...
def get_queryset(self):
#...
if len(filters) > 0:
queryset = WS.objects.filter(**filters)
else:
raise NotFound("no parameter required")
我使用了 NotFound,但您可以在 DRF 文档中找到可能更适合您的异常列表。
推荐阅读
- sql - postgres 数组到列的数组
- php - 会话用户数据无法使用 curl 获取数据
- mysql - MySQL 根据 varchar 字段的首字母进行分区
- php - 在 App\Http\Controllers\Controller.php [Laravel] 中包含共享方法
- c# - 有没有办法从所有类型的文件中提取所有元数据?
- azure - 数据库和 Azure 队列触发器:如何防止同时访问数据库资源
- python-3.x - TensorFlow 梯度示例
- reactjs - 如何使用 Typescript 实现 Redux 异步中间件?
- python - 如何使用 python-docx 将存储在数据库中的二进制图像插入到 word 文档中?
- dictionary - 你能有一张没有价值的地图吗?