- 1. django和flask区别?
相同:
- 基于wsgi
不同:
- 传值方式,flask是基于上下文管理机制进行传值
- 组件:
- flask少,扩展性强
- django多,开发效率高
- 2. flask内置组件
- 配置文件
- 路由
- 视图
- 模板
- 请求与响应
- session
- 闪现
- 蓝图
- 中间件
- 特殊装饰器
- 3. Flask上下文管理是如何实现?
我认为上下文管理可以分成三个阶段
1,处理请求,并通过localstack将请求相关数据封装到一个栈local中
2,处理视图函数,通过代理localproxy,调用偏函数,通过localstack从local中取到数据
3,保存cookie,对每个对象采用各自的pop方法进行删除
- 4. 为什么要创建LocalStack类 or Local对象中为什么保存成 {111:{stack:[ctx, ]}}
Web应用时:
- 服务端单线程:
{
111:{stack: [ctx, ]}
}
- 服务端多线程:
{
111:{stack: [ctx, ]}
112:{stack: [ctx, ]}
}
离线脚本:
with app01.app_context():
print(current_app)
with app02.app_context():
print(current_app)
print(current_app)
PS: 实现栈
- Stack() 创建一个新的空栈
- push(item) 添加一个新的元素item到栈顶
- pop() 弹出栈顶元素
- peek() 返回栈顶元素
- is_empty() 判断栈是否为空
- size() 返回栈的元素个数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
class
Stack(
object
):
"""栈"""
def
__init__(
self
):
self
.items
=
[]
def
is_empty(
self
):
"""判断是否为空"""
return
self
.items
=
=
[]
def
push(
self
, item):
"""加入元素"""
self
.items.append(item)
def
pop(
self
):
"""弹出元素"""
return
self
.items.pop()
def
peek(
self
):
"""返回栈顶元素"""
return
self
.items[
len
(
self
.items)
-
1
]
def
size(
self
):
"""返回栈的大小"""
return
len
(
self
.items)
if
__name__
=
=
"__main__"
:
stack
=
Stack()
stack.push(
"hello"
)
stack.push(
"world"
)
stack.push(
"lcg"
)
print
stack.size()
print
stack.peek()
print
stack.pop()
print
stack.pop()
print
stack.pop()
|
- 5.Flask第三组件:
- flask-session(scoped-session)将默认保存的签名cookie中的值 保存到 redis/memcached/file/Mongodb/SQLAlchemy
- flask-sqlalchemy 将SQLAlchemy相关的所有功能都封装到db=flask_sqlalchemy.SQLAlchemy()对象中
- flask-migrate 数据化迁移
- flask-script 把flask像django一样,执行 - python manage.py runserver或- python manage.py 自定义命令
- DBUtils 数据库连接池
- wtforms 用于对python web框架做表单验证。
- 自定义 Auth,参考的是flask-login组件