2016-10-26 6 views
1

背景:プログラムにデータを追加するには、POSTリクエストを行う必要があります。Django TypeError:object()にはパラメータがありません

私は現在、arduinoによって送信されるデータパケットをシミュレートするために、高度なRESTクライアントを使用しています。 現在、POSTリクエストとしてこれを送信している:

{"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が無効になっている)、このクラスに

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; 

これを投稿する場合、私はエラーを取得します。

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のnoobですので、何が間違っているかについての拡張説明をしてください。

EDIT: functionとclassのクラッシュする名前を置き換えました。私は正しいコードで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; 

EDITを得る:私は@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に私はあなたの助けをありがとう、それが想定しているとして、私はOK 200を得る

url(r'^voltage/', views.Voltage, name='Voltage'), 
to 
    url(r'^voltage/', views.voltage, name='Voltage'), 

を電圧に電圧を変更することが。 すべての回答に感謝します。

+1

機能とクラスが同じ名前 'Voltage' –

+0

コードreviewyではなく、答えを共有するべきではありませんが、あなたが本当にむしろJSONを構築するために、' json'モジュールを使用する必要があります文字列メソッドよりも。 – RegularlyScheduledProgramming

+0

私はそれを修正することができました。ありがとう@MosesKoledoye –

答えて

0

グローバル変数は宣言しないでください。これは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() 

マニュアルを参照してください:https://docs.djangoproject.com/en/1.10/ref/models/instances/#creating-objects

+0

これがエラーを修正するなら、私はこれをやろうとしていますが、グローバル変数を作成するのが簡単になりました。 私はまだ私のコードを上記の例に変更しようとします。 –

+0

私はそれを実装したと思うが、それは500エラーを解決しない。 –

+1

@ronaldberkhoutグローバル変数は最初は便利だと思うかもしれませんが、Djangoのような並行環境ではすぐにデバッグするために多大な努力を必要とするランダムなバグに直面します。グローバル変数は使用しないでください。 – knbk

関連する問題