[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,为什么,不绑定不行吗?
from flask import Flask, session, request
app = Flask(__name__)
app.secret_key = '~\xc8\xc6\xe0\xf3,\x98O\xa8z4\xfb=\rNd' @app.route('/login')
def login():
uid = request.args.get('uid')
psw = request.args.get('psw')
if uid and psw:
session['uid'] = uid
session['_login'] = True
return '<h1>login succeed!</h1>'
return '<h1>login failed</h1>' @app.route('/logout')
def logout():
if 'uid' in session:
session.pop('uid')
if '_login' in session:
session.pop('_login')
return '<h1>logout succeed</h1>'
return '<h1>logout failed<h1>' @app.route('/test_login')
def tst():
if 'uid' in session:
return '<h1>you are still in</h1>'
else:
return '<h1>you have logouted</h1>'
if __name__ == '__main__':
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 状态保持session和上下文session的区别
问题场景: 在falsk项目中导入了两个session: 首先,配置文件config.py文件中 有个 flask_session扩展导入了Session ( from flask_sessi ...
- flask总结之session,websocket,上下文管理
1.关于session flask是带有session的,它加密后存储在用户浏览器的cookie中,可以通过app.seesion_interface源码查看 from flask import Fl ...
- 将 flask 中的 session 存储到 SQLite 数据库中
将 flask 中的 session 存储到 SQLite 数据库中 使用 flask 构建服务器后端时,常需要在浏览器端存储 cookie 用于识别不同用户,根据不同的 cookie 判断出当前请求 ...
- Flask基础之session验证与模板渲染语法(jinja2)
目录 1.http传输请求头参数 2.Flask中request.data参数处理 3.Flask中request.json参数 4.Flask中的session管理 5.Flask中模板语法(if, ...
- Flask的插件session、SQLAlchemy、Script、Migrate
一.flask-session 1.为什么要使用flask-session 因为flask默认的session是通过请求上下文放入到Local中的,是存在内存的,而使用flask-session可以更 ...
- flask基础之session原理详解(十)
前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...
- flask中cookie,session的存储,调用,删除 方法(代码demo)
# -*- encoding: utf-8 -*- # cookie,session的存储,调用,删除 from flask import Flask,make_response,request,se ...
- Flask 上下文管理-- (session,request,current_app的传递)--类似本地线程实现,以及多app应用
Flask session,request,current_app的传递 请求上下文的作用 -- 封装请求相关得数据(request,session) 请求上下文 request session re ...
- Flask中的session ,自定义实现 session机制, 和 flask-session组件
session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:'xxxxxx'}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证: 注意 ...
随机推荐
- Java后台获取前端utf-8格式 ;空格,使用trim()消除不了的解决办法
byte bytes[] = {(byte) 0xC2,(byte) 0xA0}; String UTFSpace = new String(bytes,"utf-8"); htm ...
- <P>标签小细节
html标签对大小写不敏感. 注释:浏览器会自动地在段落的前后添加空行.(<p> 是块级元素) 提示:使用空的段落标记 <p></p> 去插入一个空行是个坏习惯.用 ...
- 线段树(dfs序建树加区间更新和单点查询)
题目链接:https://cn.vjudge.net/contest/66989#problem/J 记录一下这道折磨了我一天的题,.... 具体思路: 具体关系可通过dfs序建树,但是注意,在更新以 ...
- 2016.5.14——leetcode-HappyNumber,House Robber
leetcode:HappyNumber,House Robber 1.Happy Number 这个题中收获2点: 1.拿到题以后考虑特殊情况,代码中考虑1和4,或者说<6的情况,动手算下.( ...
- sql____001
题目: create table my_001 (id int,value int); insert into my_001 values(1,10): insert into my_001 valu ...
- 使用DOS访问数据库详解
今天突发奇想,想是否可以用DOS命令来操作本地数据库或者连接其他外地数据库,网上搜了很多教程比较繁琐,自己想写一篇文章详细叙述一下,也为以后复习做点备份. 工具: 电脑 win7 64bit MySQ ...
- jenkins打包安卓项目
jenkins打包安卓项目和其它项目差不了太多. 1.构建选择 gradle(如果不用gradle自己写脚本编译也可) 2.jenkins用户需要安装JDK.SDK,jenkins会自动下载gradl ...
- plsql developer配置
一:今天plsql developer连接 出问题了 ,Oracleclient没正确安装 0.连接vpn 1.环境变量:TNS_ADMIN = D:\worksoftware\oracleClien ...
- CF529B 【Group Photo 2 (online mirror version)】
贪心枚举最后方案中最大的h,设为maxh若某个人i的wi与hi均大于maxh,则此方案不可行若某个人恰有一个属性大于maxh,则可确定他是否换属性剩下的人按wi-hi从大到小排序后贪心选择O(nlog ...
- 2016-2017-2 20155309南皓芯java第四周学习总结
教材内容总结 这次我们学习的还是两章的内容,学习任务量跟上次比的话大体上来讲是差不多的. 继承与多态 继承 继承也符合DRY(Don't Repeat Yourself)原则 Role role1 = ...