flask总结
flask,是一个轻量级的框架 可拓展性强,第三方组件多. 内置:路由/视图/模板(jinjia2)/cookie/session/中间件 扩展:wtforms/flask-session
django,是一个重量级的框架. django内置了很多功能. 例如: admin/from/模板/modelform/form/session/cookie/中间件
flask蓝图作用:目录结构的划分
flask蓝图和django的app有什么区别?
相同:
可以做业务的划分,django可以将不同业务放到不同app中,flask放在蓝图中.
使用时,都需要注册.
支持在URL中添加前缀.
不同点:
django的app比flask蓝图涵盖的东西更多.例如:modles
url反向解析,flask中要加蓝图为前缀;django和app无关.
before request的粒度.
3.DBUtis
数据库 原生sql 单例模式
4.原生SQL和ORM的区别?
原生SQL: 开发效率低/执行效率高. ORM: 开发效率高/执行效率低. 本质: orm底层会转换成SQL语句.
5.wtforms
对用户提交的数据进行格式校验
6.flask会有一些特殊装饰器
before_request
after_request
route
7.session是以加密的形式存在用户浏览器的cookie上.
8.源码执行的顺序
before first request #每次生命周期开始执行 before request 视图 after request
9.源码相关知识点
- threading.local有什么作用?
为每个线程开辟一个独立空间,在空间存储数据
- flask中没有用threading.local,而是自定义了Local对象.
更高级的地方,在于为每个协程开辟独立空间. 本质:创建字典 key(线程或协程):value
- LocalStack的对象
Local对象:栈(push,pop,top栈顶)
- RequestContext对象(request/session)
- AppContext对象(app,g)
10.g是什么?
相当于是flask中一次请求周期中可用的一个 "全局变量",本质上是放在local对象的app_ctx中. 应用场景:权限校验.
11.在flask中request/session/current_app/g
都在在push之后和pop之前才能使用.
12.g和session有什么区别?
session,如果某个次请求赋值,下次请求再来时,session中有值.
g,只在一次请求周期有效,下次请求再来无法获取.
13.在flask中要编写离线脚本
with app.app_context(): pass
14.在flask中为什么要将local中的值维护成一个栈?
- web运行时,栈中只能有一个值,栈的特性根本没用. - 离线脚本且多app嵌套请求下: app1 = create_app() # 将此对象放到Local中 with app1.app_context(): print(current_app.config) # top app2 = create_app() with app2.app_context(): print(current_app.config) # top print(current_app.config) # top
15.Local和LocalStack对象
关于flask了解:
1. 没有用flask做过项目,主要用的是django. 2. 没有写过项目,但这个框架比较特殊,我自己对他感兴趣,所有研究过他的源码. 3. 源码的什么东西: - 上下文管理 - threading.local和flask的Local对象 - LocalStack对象 - RequestContex(request,session) - AppContext(app,g) 补充:0.9版本 - 源码执行流程 - 路由匹配 view_functions = { "login":login }, url_map = Map() - before_first_request,列表 - befoe_request,字典 - 视图 - after_request,字典(reverse) 4.组件: - wtforms - DBUtils(SQLHelper/单例模式) 5.私下: SQLAlchemy插件.