【问题标题】:python flask microframework not able to use session variablepython烧瓶微框架无法使用会话变量
【发布时间】:2016-07-28 04:47:01
【问题描述】:
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/ 上运行服务器。我面临的问题是我可以在signup 中使用session,但不能在unregister 中使用它。我通过 curl 使用它:

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'

【问题讨论】:

    标签: python-2.7 session curl flask sqlalchemy


    【解决方案1】:

    你错过了一个重要的部分:

    当您分配会话变量时,例如:session['email'] = email,Flask 将该信息保存在浏览器的 cookie 中。因此,只能通过浏览器读取。

    您正在尝试使用 cURL POST 请求读取会话。但是,命令行与浏览器不同,这意味着 cURL 无法访问浏览器。

    这样,读取session['email'] 将返回KeyError,这意味着email 不存在。

    读取会话变量的正确方法是在浏览器中运行应用程序时,而不是通过命令行请求。

    此外,如果密钥不存在,您应该使用返回 Nonesession.get('email'),而不是抛出错误。

    我面临的问题是我可以在注册时使用会话,但无法在注销时使用它

    当您从命令行访问/signup时,您只是分配给内存中的会话对象,代码运行完成后该对象不再可用。

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多