Python Django-期望从视图返回'Response'、'HttpResponse'或'HttpStreamingResponse',但收到一个`<;类别';非类型'&燃气轮机`
为什么我会犯这个错误期望从视图返回Python Django-期望从视图返回'Response'、'HttpResponse'或'HttpStreamingResponse',但收到一个`<;类别';非类型'&燃气轮机`,python,django,django-rest-framework,Python,Django,Django Rest Framework,为什么我会犯这个错误期望从视图返回响应、HttpResponse或HttpStreamingResponse,但收到了如何解决此问题 我的主页/api/views.py from rest_framework import status from rest_framework.response import Response from rest_framework.decorators import api_view from Homepage.models import EducationL
响应
、HttpResponse
或HttpStreamingResponse
,但收到了
如何解决此问题
我的主页/api/views.py
from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import api_view
from Homepage.models import EducationLevel
from Homepage.api.serializers import EducationLevelSerializer
@api_view(['GET', ])
def api_detail_educationlevel(request):
try:
education = EducationLevel.objects.all()
except EducationLevel.DoesNotExist:
return Response(status=status.HTTP_400_BAD_REQUEST)
if request.method == "GET":
serializer = EducationLevelSerializer(education)
return Response(serializer.data)
主页/api/serializers.py
from rest_framework import serializers
from Homepage.models import EducationLevel
class EducationLevelSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = EducationLevel
field = ('Sequence', 'Description', 'Status')
我的主页/api/url.py
from django.urls import path
from Homepage.api.views import api_detail_educationlevel
app_name='educationlevel'
urlpatterns = [
path('', api_detail_educationlevel, name="detail"),
]
我的主URL.py
urlpatterns = [
path('api/educationlevel/', include('Homepage.api.urls', 'educationlevel_api')),
]
更新
当我尝试这个的时候
def api_detail_educationlevel(request, slug):
try:
education = EducationLevel.objects.get(id=slug)
except EducationLevel.DoesNotExist:
return Response(status=status.HTTP_400_BAD_REQUEST)
我得到这个错误
原因是您的Except块。在您的响应中,您没有传递任何数据,只传递了状态。我建议将空字符串作为状态为的数据传递您所说的错误是当视图的返回值为None时
@api_view(['GET', ])
def api_detail_educationlevel(request):
try:
education = EducationLevel.objects.all()
上面的代码EducationLevel.objects.all()
从未引发EducationLevel.DoesNotExist
异常,因为Django查询集执行惰性计算。因此,不执行以下异常处理过程
except EducationLevel.DoesNotExist:
return Response(status=status.HTTP_400_BAD_REQUEST)
if request.method == "GET":
serializer = EducationLevelSerializer(education)
return Response(serializer.data)
。。。在python中,如果函数未指定返回值,则返回
None
。这就是为什么期望从视图返回响应、HttpResponse或HttpStreamingResponse,但收到出现的错误的原因 您的视图需要返回HttpResponse
对象,但您的代码没有
@api_view(['GET', ])
def api_detail_educationlevel(request):
try:
education = EducationLevel.objects.all()
except EducationLevel.DoesNotExist:
return Response(status=status.HTTP_400_BAD_REQUEST)
if request.method == "GET":
serializer = EducationLevelSerializer(education)
return Response(serializer.data)
if
语句应写入块之外的。容易被忽视的小问题
上面的代码也有些冗余。装饰程序@api\u视图(['GET'])
无论如何都会检查请求。方法是否有值GET
。因此,您可以删除冗余检查。生成的代码将成为:
@api_view(['GET', ])
def api_detail_educationlevel(request):
try:
education = EducationLevel.objects.all()
except EducationLevel.DoesNotExist:
return Response(status=status.HTTP_400_BAD_REQUEST)
serializer = EducationLevelSerializer(education)
return Response(serializer.data)
编辑:正如@youngminz所指出的,如果您获取的所有对象都没有任何筛选条件,则不需要进行异常处理。这是否回答了您的问题@对不起,但是你可以为同样的问题提出另一个问题。我不认为我们在这里回答所有问题。你试图滥用提问的特权。试着看看你的问题,把这些点连起来解决它。您可以使用导入pdb;pdb.在代码中的某些位置设置_trace()
,以测试哪些有效,哪些无效。我该怎么做?即使我有这个?“”教育=教育级别。对象。所有()