Python Django TypeError:object()不接受任何参数
背景:我需要做一个POST请求,将数据添加到我的程序中 我目前正在使用高级REST客户端来模拟将由arduino发送的数据包。 它当前正在将此作为POST请求发送:Python Django TypeError:object()不接受任何参数,python,django,post,Python,Django,Post,背景:我需要做一个POST请求,将数据添加到我的程序中 我目前正在使用高级REST客户端来模拟将由arduino发送的数据包。 它当前正在将此作为POST请求发送: {"cellVoltageLow":28,"cellVoltageHigh":415,"cellVoltageAvg":415, "cellTempMin":5,"cellTempMax":15,"cellTempAvg":10,"stateOfCharge":50, "errorBitmap":0,"batteryVo
{"cellVoltageLow":28,"cellVoltageHigh":415,"cellVoltageAvg":415,
"cellTempMin":5,"cellTempMax":15,"cellTempAvg":10,"stateOfCharge":50,
"errorBitmap":0,"batteryVoltageIn":420,"motorAmp":200,"usageAmp":210,
"auxAmp":10,"rpmMotor":1000,"uiState":0,"chargingStatus":1,
"motorTemp":15,"inverterTemp":30,"inletTemp":5,"ambientTemp":5,
"chargingAmp":10,"chargingVoltage":420,"apsVoltage":42,
"maxAmpsInCharge":10,"bmsErrorValue":0,"energyDriveAH":1000,
"energyRegenAH":100,"energyChargeAH":10,"energyDischargeAH":10,
"energyDriveWH":1000,"energyRegenWH":10,"energyChargeWH":2300,
"energyDischargeWH":23000,"drivenDistanceCM":100000,
"chargedEnergyWH":1000,"returnedEnergyWH":10000,
"connectedTimeSec":100,"driveTimeSec":240}
如果我将此内容发布到此类(csrf已禁用)
然后我得到了错误
Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
response = get_response(request)
File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
TypeError: object() takes no parameters
我是python的高手,所以请给我一个关于什么地方出了问题的详细解释
编辑:
我替换了函数和类的冲突名称。我创建JSON字符串的方法也是错误的,因为我不知道如何使用正确的代码创建JSON字符串
我还得到了内部错误500
def voltage(request):
global voltage
if request.method == 'POST':
data = json.loads(request.body.decode('utf-8'))
Voltage.cellVoltageLow = data["cellVoltageLow"]
Voltage.cellVoltageAvg = data["cellVoltageAvg"]
Voltage.cellVoltageHigh = data["cellVoltageHigh"]
Voltage.batteryVoltageIn = data["batteryVoltageIn"]
Voltage.chargingVoltage = data["chargingVoltage"]
Voltage.apsVoltage = data["apsVoltage"]
print("got ur message" + str(request.body))
return HttpResponse("OK")
if request.method == 'GET':
return HttpResponse('{ "cellVoltageLow":' + str(Voltage.cellVoltageLow)
+ '{ "cellVoltageAvg":' + str(Voltage.cellVoltageAvg)
+ '{ "cellVoltageHigh":' + str(Voltage.cellVoltageHigh)
+ '{ "batteryVoltageIn":' + str(Voltage.batteryVoltageIn)
+ '{ "chargingVoltage":' + str(Voltage.chargingVoltage)
+ '{ "apsVoltage":' + str(Voltage.apsVoltage)
+ ' }' )
else:
return HttpResponse ('Not allowed')
class Voltage:
cellVoltageLow = 0;
cellVoltageAvg = 0;
cellVoltageHigh = 0;
batteryVoltageIn = 0;
chargingVoltage = 0;
apsVoltage = 0;
编辑:我在@MosesKoledoye回复的帮助下修复了它。答案是电压
我把代码改成了
def voltage(request):
global voltage
if request.method == 'POST':
data = json.loads(request.body.decode('utf-8'))
Voltage.cellVoltageLow = data["cellVoltageLow"]
Voltage.cellVoltageAvg = data["cellVoltageAvg"]
Voltage.cellVoltageHigh = data["cellVoltageHigh"]
Voltage.batteryVoltageIn = data["batteryVoltageIn"]
Voltage.chargingVoltage = data["chargingVoltage"]
Voltage.apsVoltage = data["apsVoltage"]
print("got ur message" + str(request.body))
return HttpResponse("OK")
if request.method == 'GET':
return HttpResponse('{ "cellVoltageLow":' + str(Voltage.cellVoltageLow)
+ '{ "cellVoltageAvg":' + str(Voltage.cellVoltageAvg)
+ '{ "cellVoltageHigh":' + str(Voltage.cellVoltageHigh)
+ '{ "batteryVoltageIn":' + str(Voltage.batteryVoltageIn)
+ '{ "chargingVoltage":' + str(Voltage.chargingVoltage)
+ '{ "apsVoltage":' + str(Voltage.apsVoltage)
+ ' }' )
else:
return HttpResponse ('Not allowed')
class Voltage:
cellVoltageLow = 0;
cellVoltageAvg = 0;
cellVoltageHigh = 0;
batteryVoltageIn = 0;
chargingVoltage = 0;
apsVoltage = 0;
然后在urls.py中,我将电压改为电压
url(r'^voltage/', views.Voltage, name='Voltage'),
to
url(r'^voltage/', views.voltage, name='Voltage'),
谢谢你的帮助,我得到了一个应该是200的OK。
感谢您的回复。您不应该声明全局变量。这不是在Django中创建对象的正确方法 相反,只需在数据准备好存储后初始化并声明对象即可
if request.method == "POST":
data = json.loads(request.body.decode('utf-8'))
new_voltage = Voltage.objects.create()
new_voltage.cellVoltageLow = data["cellVoltageLow"]
... # Store other data too
new_voltage.save()
请参阅文档:不应声明全局变量。这不是在Django中创建对象的正确方法 相反,只需在数据准备好存储后初始化并声明对象即可
if request.method == "POST":
data = json.loads(request.body.decode('utf-8'))
new_voltage = Voltage.objects.create()
new_voltage.cellVoltageLow = data["cellVoltageLow"]
... # Store other data too
new_voltage.save()
请参阅文档:函数和类不应该共享相同的名称
Voltage
code reviewy而不是答案,但是您应该真正使用json
模块来构建json,而不是字符串方法。我能够修复它。谢谢@MosesKoledoyeBTW:我还得到了object()不带参数的错误,当我搜索时,它落在了这里。但是我出错的原因是我忘记了从serializers.ModelSerializer派生序列化程序--只是需要检查其他内容…函数和类不应该共享相同的名称Voltage
code reviewy而不是答案,但是您应该真正使用json
模块来构建json,而不是字符串方法。我能够修复它。谢谢@MosesKoledoyeBTW:我还得到了object()不带参数的错误,当我搜索时,它落在了这里。但我出错的原因是我忘记了从serializers.ModelSerializer派生序列化程序--只是需要检查其他内容…如果这可以修复错误,我愿意尝试这样做,但创建全局变量看起来要简单得多,因为我从来没有得到过任何代码简化,所以我宁愿使用全局变量。我仍然会尝试将我的代码更改为上面的示例。我“认为”我实现了它,但它没有解决500错误。@RonaldBerkout全局变量起初可能看起来很方便,但在Django这样的并发环境中,您很快就会遇到看似随机的错误,需要花费大量精力进行调试,更不用说修理了。不要使用全局变量。@knbk我将在下一个项目中记住这一点。可悲的是,除了这个错误,代码几乎完成了……如果这可以修复错误,我愿意尝试这样做,但创建一个全局变量看起来要简单得多,因为我从来没有对代码进行过任何修改,所以我宁愿坚持使用全局变量。我仍然会尝试将我的代码更改为上面的示例。我“认为”我实现了它,但它没有解决500错误。@RonaldBerkout全局变量起初可能看起来很方便,但在Django这样的并发环境中,您很快就会遇到看似随机的错误,需要花费大量精力进行调试,更不用说修理了。不要使用全局变量。@knbk我将在下一个项目中记住这一点。遗憾的是,代码几乎完成了,除了这个错误。。。