2017-05-27 13 views
0

こんにちは、私は単純なフラスコの残りのAPIで作業しています。私は別のサーバーでフロントエンドとバックエンドを実行しています。次のコードは、私がpostmanからサーバーコードにアクセスする場合に機能します。POSTメソッドのリクエストがある場合、セッション変数を取得できません。

from flask import Flask, jsonify, session, request 
import os 

app = Flask(__name__) 
app.config['SECRET_KEY'] = os.urandom(24) 

@app.route('/api/login', methods=['POST']) 
def first(): 
    session['this_one'] = 'first' 
    return jsonify({'message': 'hello', 'success':1}) 


@app.route('/api/messages', methods=['POST']) 
def second(): 
    print session['this_one'] 

    # args = request.json 
    return jsonify({'message':'fdsafd'}) 


if __name__ == '__main__': 
    app.run(debug=True) 

ここでは、「第2の」方法で方法を印刷することができません。私は取得していますエラーです「KeyError例外」

KeyError: 'this_one' 

しかし、私はそれが正常に動作しているPOSTメソッドを削除する場合。そして、私はセッション変数なしで二重チェックし、コードは正常に機能しました。誰でも私にこれを手伝うことができますか?我々はまた、応答のヘッダーを使用しています。しかし、私はここにそのコードを貼り付けていません。

ありがとうございます。

私は使用したhtmlコードを投稿しています。

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script> 

     $(document).ready(function() { 


    $("#login").click(function() { 
     console.log("1") 
      $.ajax({ 
       type: "POST", 
       url: "http://127.0.0.1:5000/api/login", 
       data: JSON.stringify ({user: 'bbb'}), 
       contentType: "application/json", 
       dataType:"json", 
       crossDomain:true, 

       success: function (data, status, jqXHR) { 
        console.log("success "+data['message']); 
       }, 

       error: function (jqXHR, status) { 
        // error handler 
        console.log(jqXHR); 
        console.log('fail' + status.code); 
       } 
      }); 
    }); 

    $("#go").click(function() { 
     console.log("2") 
     $.ajax({ 
       type: "POST", 
       url: "http://127.0.0.1:5000/api/messages", 
       data: JSON.stringify ({user: 'aaa'}), 
       contentType: "application/json", 
       dataType:"json", 
       crossDomain:true, 

       success: function (data, status, jqXHR) { 
        console.log("success "+data['message']); 
       }, 

       error: function (jqXHR, status) { 
        // error handler 
        console.log(jqXHR); 
        console.log('fail' + status.code); 
       } 
      }); 
    }); 

}); 


    </script> 
</head> 
<body> 
    <button id="login">aaa</button> 
    <button id="go">bbb</button> 
</body> 
</html> 

ここにはログがあります。 jqueryがOPTIONSリクエストを送信しています。

127.0.0.1 - - [27/May/2017 16:09:45] "OPTIONS /api/login HTTP/1.1" 200 - 
first 
127.0.0.1 - - [27/May/2017 16:09:45] "POST /api/login HTTP/1.1" 200 - 
127.0.0.1 - - [27/May/2017 16:09:52] "OPTIONS /api/messages HTTP/1.1" 200 - 
127.0.0.1 - - [27/May/2017 16:09:52] "POST /api/messages HTTP/1.1" 500 - KeyError 

私は郵便配達員と一緒に試してみると、私はOPTIONSリクエストを見ていません。私はPythonコードでOPTIONS要求を処理する必要がありますと信じています。しかし、ドキュメンテーションによると、フラスコはそれを処理します。

私は今何をすべきか分かりません。誰かが私を助けることができますか?それが動作するはず

+0

POST/api/login HTTP/1.1 "200-' ' first''127.0.0.1 - [27/May/2017 13:38:53] .0.1 - - [27/May/2017 13:39:01] "POST/api/messages HTTP/1.1" 200-' –

答えて

1

は、私はあなたのコードを確認しました:

127.0.0.1 - - [27/May/2017 13:38:53] "POST /api/login HTTP/1.1" 200 - 
first 
127.0.0.1 - - [27/May/2017 13:39:01] "POST /api/messages HTTP/1.1" 200 - 

私はsession['this_one']のための初期設定が存在しないとして、それは、エラーが発生します、最初の時間であなたPOST /api/messages HTTP/1.1と思います。最初にを設定するには、"POST /api/login HTTP/1.1"を入力する必要があります。セッションで使用することができます。

更新:

from flask import Flask, jsonify, session, request 
from flask import render_template 
import os 

app = Flask(__name__) 
app.config['SECRET_KEY'] = os.urandom(24) 

@app.route('/') 
def index(): 
    return render_template('index.html') #your html goes here 

@app.route('/api/login', methods=['POST']) 
def first(): 
    session['this_one'] = 'first' 
    return jsonify({'message': 'hello', 'success':1}) 


@app.route('/api/messages', methods=['POST']) 
def second(): 
    print(session['this_one']) 

    # args = request.json 
    return jsonify({'message':'fdsafd'}) 


if __name__ == '__main__': 
    app.run(debug=True) 

その後、フラスコのアプリを実行して、あなたはその後、ここから、あなたはセッションが動作している見ることができ、それはウェブアプリになり、フラスコアプリとしてHTMLの実行を維持する必要があり、それ以外の場合、セッションはありません。

+0

いいえ、これはJavaスクリプトから呼び出されていて、まったく動作しませんでした。そして私は、最初のメソッドを最初に呼び出し、後で別のメソッドを後で呼び出します。あなたはカールを使用していますか? –

+0

問題がセッションの問題です。 –

+0

郵便配達員からあなたのAPIをテストしました。 –

関連する問題