2017-10-25 7 views
-3

データをpython(フラスコを使用)に送信して、postgresqlテーブルを追加データで更新するためのajax呼び出しを行います。私のローカルマシンにはエラーはありませんが、私がHerokuにデプロイすると、次のようになります。 'NoneType'オブジェクトには属性 'first_name'がありません。 ボタンを数回クリックすると、それが通過します。このエラーにどう対処しますか?AJAX受信後NoneなしHerokuのSQLAlchemyにデータを渡すときにローカル

私は1つの変数だけを含むようにコードを単純化しました。 ここにajax呼び出しがあります。

$(document).ready(function() { 

    $('form').on('submit', function(event) { 
     var first_name = $('#first_name').val() 


     $.ajax({ 
      data : { 
       first_name : first_name, 

      }, 
      type : 'POST', 
      url : '/process' 
     }) 
     .done(function(data) { 
       window.location.href = "/page2" 
     }); 

     event.preventDefault(); 

    }); 

    }); 

これは、私がSQLAlchemyを使用してPythonで更新しようとしているものです。

@app.route('/process', methods=['POST']) 
def page2_process(): 
    global app_id 
    update = Data1.query.filter_by(id = app_id).first() 
    update.first_name = request.form.get('first_name') 
    db.session.commit() 
    return json.dumps({'success': True}), 200, {'ContentType':'application/json'} 

私は試しました:request.form ['first_name']私はまだ同じ問題があります。

ご協力いただければ幸いです。

要求通りにログを追加する: ログの最初の行は、更新オブジェクトが空ではないことを示すログです。それはData1からのオブジェクト18を持っているからです。

<Data1 18> 
[2017-10-26 06:58:25,886] ERROR in app: Exception on /page2_process [POST] 
Traceback (most recent call last): 
    File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", 
line 1982, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", 
line 1614, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", 
line 1517, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py", 
line 33, in reraise 
    raise value 
    File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", 
line 1612, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 
1598, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/app/app.py", line 396, in page2_process 
    update.first_name = request.from.get('first_name') 
AttributeError: 'NoneType' object has no attribute 'first_name' 
+0

で属性にアクセスすることができますが確認してください'first_name'属性にアクセスする前に' request.get_data() 'が空ではありません – lalithkumar

+0

このデータは私のローカルでは空ではありません。もし私がherokuで複数回submitを押すと、それは通ります。それが空だと思う。また、私はrequest.get_data()が何を意味するのかよくわかりません。それはrequest.form.get()の代替ですか? – Dave

+0

私は 'update = Data1.query.filter_by(id = app_id).first()'と、実際に 'None'を返すかどうかをチェックしたいと思います。また、ヘルプが必要な場合は、例外オブジェクトのメッセージだけでなく、*完全なトレースバック*を提供してください。 wsgi_app 応答= self.full_dispatch_request() "/app.py"、ライン1614で –

答えて

0

あなたのAJAX呼び出しは以下のように変更Herokuのでクライアント要求を制御することはできません場合は、次の

$.ajax({ 
     url: '/process', 
     data: JSON.stringify({ 'first_name ':first_name}, null, '\t'), 
     type: "post", 
     contentType: 'application/json;charset=UTF-8', 
     success: function(data){ 
      window.location.href = "/page2" 
     } 
    }); 

とPythonであなたがrequest.json

@app.route('/process', methods=['POST']) 
def page2_process(): 
if request.json: 
    global app_id 
    first_name = str(request.json['first_name']) 
    update = Data1.query.filter_by(id = app_id).first() 
    if update: 
     update.first_name = request.form.get('first_name') 
    else: 
     //insert 
    db.session.commit() 
return json.dumps({'success': True}), 200, 
        {'ContentType':'application/json'} 
+0

この回答を確認しましたか? @Dave – lalithkumar

+0

私はTypeErrorを取得しています: 'NoneType'オブジェクトは添字ではありません。@lalithkumar – Dave

+0

更新オブジェクトには何が入っていますか?それは空であってはいけませんか?更新された答えを確認してください@Dave – lalithkumar

関連する問題