1.flask与django的区别?
flask,是一个轻量级的框架
可拓展性强,第三方组件多.
内置:路由/视图/模板(jinjia2)/cookie/session/中间件
扩展:wtforms/flask-session
django,是一个重量级的框架.
django内置了很多功能.
例如: admin/from/模板/modelform/form/session/cookie/中间件
2.flask蓝图作用,flask蓝图和django的app有什么区别?
flask蓝图作用:目录结构的划分
flask蓝图和django的app有什么区别?
相同:
可以做业务的划分,django可以将不同业务放到不同app中,flask放在蓝图中.
使用时,都需要注册.
支持在URL中添加前缀.
不同点:
django的app比flask蓝图涵盖的东西更多.例如:modles
url反向解析,flask中要加蓝图为前缀;django和app无关.
before request的粒度.
3.DBUtis
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
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插件.