Django REST Framework视图返回NoneType触发AssertionError问题求助
报错原因
DRF的APIView视图中所有处理HTTP请求的方法(get、post等),必须返回Response、HttpResponse或其子类对象,你当前代码的get、post方法都存在返回None的场景,直接触发该Assertion错误,具体问题如下:
- get方法问题:
- 当
React表没有任何数据时,React.objects.all()返回空查询集,for循环不会执行,整个方法没有返回值,默认返回None。 - 即使表中有数据,代码会在for循环第一次迭代时直接返回,仅能返回第一条记录,不符合列表查询的常规逻辑;同时字段调用错误,模型定义的字段名为
details,你代码中写的detail.detail不存在。
- 当
- post方法问题:
序列化验证通过、数据保存成功后,没有返回任何响应对象,方法执行完毕默认返回None。
修复方案
推荐直接使用DRF序列化器处理数据序列化,修正后的views.py代码如下:
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from .models import React from .serializer import ReactSerializer class ReactView(APIView): serializer_class = ReactSerializer def get(self, request): # 序列化全量查询结果,many=True代表序列化多条数据 queryset = React.objects.all() serializer = self.serializer_class(queryset, many=True) return Response(serializer.data) def post(self, request): serializer = self.serializer_class(data=request.data) if serializer.is_valid(raise_exception=True): serializer.save() # 保存成功后返回新创建的数据和201创建成功状态码 return Response(serializer.data, status=status.HTTP_201_CREATED)
修正后所有代码路径都会返回合法的Response对象,不会再出现返回None的情况,同时自动适配空查询集的场景。
内容的提问来源于stack exchange,提问作者Codewizard_26
相关产品推荐
相关产品推荐

