Django RestAPI-AssertionError:应返回"Response"、"



我是Django Rest Framework的新手。我正在尝试为我的项目构建RESTapi。然而,我得到以下错误-

断言错误:期望从视图返回ResponseHttpResponseHttpStreamingResponse,但收到<class 'rest_framework.utils.serializer_helpers.ReturnDict'>

生成此错误的基本代码如下所示-

查看详细信息如下-

class SymbolInformation(APIView):
'''
Returns the Symbol Information
'''
def get(self, request, symbolname='NIFTY50'):
# Capturing Inputs in Appropriate Cases
symbolname = symbolname.upper()
(companyname, symbol, tablename, close, change, returns, 
upperband, lowerband, has_fno, weekly_expiry, weekly_future, 
lotsize, isIndex, stepvalue) = get_symbol_details(symbolname=symbolname)
data = SymbolInformationSerializer()
print(companyname, symbol, tablename, close, change, returns, 
upperband, lowerband, has_fno, weekly_expiry, weekly_future, 
lotsize, isIndex, stepvalue)
data = {'companyname': companyname, 'symbol': symbol, 'tablename': tablename, 'close': close, 'change': change,
'returns': returns, 'upperband': upperband, 'lowerband': lowerband, 'has_fno': has_fno, 'weekly_expiry': weekly_expiry,
'weekly_future': weekly_future, 'lotsize': lotsize, 'isIndex': isIndex, 'stepvalue': stepvalue}
print(data)
output = SymbolInformationSerializer(data)
print(output.data)
return(output.data)

get_symbol_details函数返回的实际数据如下-NIFTY 50 NIFTY 14504.80 194.00 1.36 15955.28 13054.32真-假{0:75,1:75,2:75}真50

数据字典如下-{'公司名称':'NIFTY50','符号':'NIFTY','表名称':'NIFTY','关闭':十进制('14504.80'(,'更改':十进制值('194.00'(,'返回值':十进制数('1.36'(,"上限":15955.28,"下限":13054.32,"has_fno":True,"weekly_expiry':True,"weekly_future":False,"lotsize":{0:75,1:75,2:75},"isIndex":True,':50}

相关的序列化程序代码如下-

class SymbolInformationSerializer(serializers.Serializer):
'''
Returns Index Constituents
'''
companyname = serializers.CharField(max_length=100)
symbol = serializers.CharField(max_length=100)
tablename = serializers.CharField(max_length=100)
close = serializers.DecimalField(max_digits=10, decimal_places=4)
change = serializers.DecimalField(max_digits=10, decimal_places=4)
returns = serializers.DecimalField(max_digits=10, decimal_places=4)
upperband = serializers.DecimalField(max_digits=10, decimal_places=4)
lowerband = serializers.DecimalField(max_digits=10, decimal_places=4) 
has_fno = serializers.BooleanField()
weekly_expiry = serializers.BooleanField()
weekly_future = serializers.BooleanField()
lotsize = serializers.DictField()
isIndex = serializers.BooleanField()
stepvalue = serializers.IntegerField()

序列化后的输出如下-{'companyname':'NIFTY 50','symbol':'NIFTY','tablename':'NIFTY'、'close':'14504.8000'、'change':'194.000'、'returns':'1.3600'、'upperband':'15955.2800'、'lowerband':'13054.3200'、'has_fno':True、'weekly_expiry':True,'weekly_future':False、'lotsize':{'0':75、'1':75,'2':75}、'isIndex':True阶跃值':50}

然而,我得到的错误如下-

Internal Server Error: /analysisapis/symboldetails
Traceback (most recent call last):
File "C:Python37libsite-packagesdjangocorehandlersexception.py", line 47, in inner
response = get_response(request)
File "C:Python37libsite-packagesdjangocorehandlersbase.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:Python37libsite-packagesdjangoviewsdecoratorscsrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:Python37libsite-packagesdjangoviewsgenericbase.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "C:Python37libsite-packagesrest_frameworkviews.py", line 511, in dispatch
self.response = self.finalize_response(request, response, *args, **kwargs)
File "C:Python37libsite-packagesrest_frameworkviews.py", line 426, in finalize_response
% type(response)
AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'rest_framework.utils.serializer_helpers.ReturnDict'>`

请帮我理解我错过了什么。

GET方法应该始终返回一个HttpResponse对象,您可以使用JsonResponse对象,它是HttpResponse的一个子类,有助于创建JSON编码的响应。

试试

from django.http import JsonResponse
class SymbolInformation(APIView):
'''
Returns the Symbol Information
'''
def get(self, request, symbolname='NIFTY50'):
# Capturing Inputs in Appropriate Cases
symbolname = symbolname.upper()
(companyname, symbol, tablename, close, change, returns, 
upperband, lowerband, has_fno, weekly_expiry, weekly_future, 
lotsize, isIndex, stepvalue) = get_symbol_details(symbolname=symbolname)
data = SymbolInformationSerializer()
print(companyname, symbol, tablename, close, change, returns, 
upperband, lowerband, has_fno, weekly_expiry, weekly_future, 
lotsize, isIndex, stepvalue)
data = {'companyname': companyname, 'symbol': symbol, 'tablename': tablename, 'close': close, 'change': change,
'returns': returns, 'upperband': upperband, 'lowerband': lowerband, 'has_fno': has_fno, 'weekly_expiry': weekly_expiry,
'weekly_future': weekly_future, 'lotsize': lotsize, 'isIndex': isIndex, 'stepvalue': stepvalue}
print(data)
output = SymbolInformationSerializer(data)
print(output.data)
return JsonResponse(output.data)

相关内容

最新更新