首页 > 技术文章 > flask总结

Pythonzrq 2019-12-17 18:27 原文

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

数据库 原生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插件. 

推荐阅读