Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-期望从视图返回'Response'、'HttpResponse'或'HttpStreamingResponse',但收到一个`<;类别';非类型'&燃气轮机`_Python_Django_Django Rest Framework - Fatal编程技术网

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()
,以测试哪些有效,哪些无效。我该怎么做?即使我有这个?“”教育=教育级别。对象。所有()