2016-04-07 9 views
0
from flask import Flask,redirect 
from flask import session 
app = Flask(__name__) 

@app.route('/') 
def hello_world(): 
    return 'Hello World!' 

@app.route('/signup', methods = ['POST']) 
def signup(): 
    email = 'xxxx' 
    session['email'] = email 
    print session['email'] 
    print("The email address is '" + email + "'") 
    return redirect('/') 

@app.route('/unregister', methods = ['POST']) 
def unregister(): 
    print "session check" 
    print session['email'] 
    return 'We have removed from the list!' 


if __name__ == '__main__': 
    app.secret_key = '#d\xe9X\x00\xbe~Uq\xebX\xae\x81\x1fs\t\xb4\x99\xa3\x87\xe6.\xd1_' 
    app.debug = True 
    app.run() 

私がこれを実行すると、http://127.0.0.1:5000/でサーバーを実行できます。私が直面している問題は、sessionsignupに使用できますが、unregisterでは使用できないということです。私はカールによってそれを使用しています:Pythonフラスコのマイクロフレームワークでセッション変数を使用できない

curl -X POST http://127.0.0.1:5000/unregister 

私はこのエラーを参照してください。

127.0.0.1 - - [07/Apr/2016 16:06:08] "POST /unregister HTTP/1.1" 500 - 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, 
    File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1820, in 
    response = self.make_response(self.handle_exception(e)) 
    File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1403, in 
    reraise(exc_type, exc_value, tb) 
    File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/Users/pvelumul/ACI/workspace/acitoolkit/applications/snapback/helloworld.py", line 20, in unregister 
    print session['email'] 
    File "/usr/local/lib/python2.7/site-packages/Werkzeug-0.11.4-py2.7.egg/werkzeug/local.py", line 373, in <lambda> 
    __getitem__ = lambda x, i: x._get_current_object()[i] 
KeyError: 'email' 

答えて

1

あなたは凸部欠けている:あなたはセッション変数を割り当てる場合

を、次のように:session['email'] = email、 Flaskはその情報をブラウザのクッキーに保存します。したがって、ブラウザを介してのみ読み取ることができます。

cURL POSTリクエストを使用してセッションを読み取ろうとしています。しかし、コマンドラインはブラウザとは異なります。つまり、cURLはブラウザにアクセスできません。

このように、session['email']を読み取るとKeyErrorが返されます。つまり、emailは存在しません。

セッション変数を読み取る適切な方法は、コマンドライン要求ではなく、ブラウザでアプリケーションを実行する場合です。

また、エラーが発生するのではなく、キーが存在しない場合はNoneを返すsession.get('email')を使用する必要があります。

The problem I am facing is that I am able to use session in signup but not able to use it in unregister

コマンドラインから/signupを訪問

は、あなただけのコードの実行が終了した後に使用できなくなったメモリ内のセッションオブジェクトに割り当てています。

関連する問題