[flask]flask_login模块,session及其他

Posted wilderness

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[flask]flask_login模块,session及其他相关的知识,希望对你有一定的参考价值。

读flask源码的时候,有一点一直到现在都没有一个清晰的概念,比如四个全局变量g,current_app,session,request是怎么做到的

按照查到的资料里面的说法,为了不至于每次都主动调用函数去获取请求值,所以在flask里面用了设计模式中的Proxy,在flask中用到了LocalProxy对四个全局变量进行代理,同时为了让其在多线程中可以访问,使用了类LocalStack,然后这四个变量都绑定到这个LocalStack的一个实例上面,就比如_request_ctx_stack,而这个类实现了把不同的请求绑定到不同的线程上面或者协程上面。然后就实现了不同请求的全局可用变量。

但是看源码,这四个变量的生成方式是一样的,又怎么实现flask文档里面说的这些呢?

比如:

session: A session basically makes it possible to remember information from one request to another. 

g:....

还有flask_login 源码中的login_user和logout_user,除了用到了session,还把当前用户绑定到了_request_ctx_stack,为什么,不绑定不行吗?

 1 from flask import Flask, session, request
 2 app = Flask(__name__)
 3 app.secret_key = ~\xc8\xc6\xe0\xf3,\x98O\xa8z4\xfb=\rNd
 4 
 5 @app.route(/login)
 6 def login():
 7     uid =  request.args.get(uid)
 8     psw = request.args.get(psw)
 9     if uid and psw:
10         session[uid] = uid
11         session[_login] = True
12         return <h1>login succeed!</h1>
13     return <h1>login failed</h1>
14 
15 @app.route(/logout)
16 def logout():
17     if uid in session:
18         session.pop(uid)
19     if _login in session:
20         session.pop(_login)
21         return <h1>logout succeed</h1>
22     return <h1>logout failed<h1>
23 
24 
25 @app.route(/test_login)
26 def tst():
27     if uid in session:
28         return <h1>you are still in</h1>
29     else:
30         return <h1>you have logouted</h1>
31 if __name__ == __main__:
32     app.run(debug=True)

同时分别用chrome和firefox去登录退出,证明是可以的,互不干扰,但是flask_login源码离那样写是基于什么考虑呢??

写的很乱,先留下个问题吧

参考资料:

http://flask.pocoo.org/docs/0.10/api/#flask.request

https://flask-login.readthedocs.io/en/latest/

https://zhuanlan.zhihu.com/p/24629677

http://www.zlovezl.cn/articles/charming-python-start-from-flask-request/

以上是关于[flask]flask_login模块,session及其他的主要内容,如果未能解决你的问题,请参考以下文章

Flask通过Flask_login实现用户登录

flask_login 中的 login_required 装饰器未重定向到上一页

flask_login 整合 pyjwt + json 简易flask框架

使用 Flask 框架写用户登录功能的Demo时碰到的各种坑——创建应用

flask-login的使用3

基于flask的网页聊天室