flask知识点总结

flask知识点总结

复制代码
启动方式:python app.py runserver -h 127.0.0.1 -p 11231

flask中知识点总结
1. flask和django的区别? 2. flask请求的声明周期?     wsgi:werkzeug ,wsgiref,uwsgi :本质就是创建一个socket服务端
    before_request
    视图函数
    after_request
3.wsgi的本质
    socket服务端
4.flask的蓝图的作用?
    默认flask通过一个脚本就可以实现,但由于项目业务可能会比较多,为了方便业务的拆分,我们会创建多个文件(蓝图)进行管理。 

5.flask的蓝图和django的app有什么区别?
    相同点:
        1.都可以做业务拆分:flask可以将业务放到蓝图中拆分,django可以将业务放到各个app里面进行拆分
        2.都是注册之后才能使用
        3.都可以在自己的内部定义模板和静态文件等
    不同点:
        1.注册位置不同
        2.关于中间件的作用域不同
            flask的before_request,after_request等由于作用域不同,所以粒度更细
            但是django的中间件是应用在全局的,所有的app都会使用
        3.django有很多内置的app,但是flask的蓝图没有内置,必须自己写。

6.在app=Flask()对象中可以传入 静态文件、模板的配置。 
7.通过app.config读取配置文件(localsettings.py)。
8.特殊装饰器
    before_first_reqeust
    before_request
    after_request
    route
    template_global
    template_filter
9.为flask的视图设置装饰器时,需要
    - 位置
    - functools.wraps
    - functools.partial

10.Flask可以定义FBV和CBV
11.flask中内置了session,session的数据以加密的形式放入cookie中。
12.flask自己没有模板,而是用的第三方的jinja2模板。 
13.threading.local
14.自定义threading.local,内部维护了一个字典,以 线程/协程 ID为键。
15.栈的特点:后进先出。 
16.LocalStack的类,在Local中维护了一个栈
    {
        111:{stack:[ctx, ]}
    }
17.单利模式(基于文件导入实现)
    在flask程序中,只会创建两个LocalStack对象。

    _request_ctx_stack = LocalStack()
    _app_ctx_stack = LocalStack()
    
18.flask的请求流程
   - 请求准备阶段
   - 请求到来
     - 创建两个ctx=RequestContext对象; app_ctx = AppContext对象,将对象放入local中。 
     - before/视图/after
     - 销毁ctx / app_ctx
19.g是什么?
20.数据库链接池:DBUtils
21.面向对象的with上下文:enter/exit
22.flask和django的区别
复制代码
flsak和django的区别?

    django是个大而全的框架,flask是一个轻量级的框架,flask的扩展性比较好,有很多第三方组件
    django的内部为我们提供了非常多的组件:
        orm
        serrion$cookie
        admin
        form
        modelform
        路由
        视图
        模板
        中间件
        分页
        auth
        content-type
        缓存
        信号
        多数据库连接(django的数据库配置文件中可以体现)
        
    flask框架本身没有太多的功能:路由/视图/模板(jinja2)/session/中间件 ,第三方组件非常齐全。  
      
    0.django的请求处理是逐一封装和传递; flask的请求是利用上下文管理来实现的。
  1.请求的存放地址不同    
     flask的请求时利用上下文管理来实现的(是将请求放到一个地方)
     django的请求处理是逐一封装和传递
  2.session的处理不同
    django是存放在数据库中
    flask是存放在加密的cookie里面,存放到用户浏览器里面
    还有一些更小的区别
    3.flask的配置可以放在flask对象里面,可以在里面传入配置文件,和模板的配置等
    4.dlask有一些特殊的装饰器:
        before_first_request
        before_request
        after_request
        route
        tempalte_global
        template_filter
复制代码

 

复制代码
从flask的源码中学到了什么??
    1.学到了新的编程思路
        从diango和drf中可以看出所有的请求相关数据都是从一阶段传递到另一阶段的
        但是在flask中是存在一个地方,以后使用再去取值。
        
    2.学习到了设计模式
        单例模式:localstack对象的创建。只能有一个实例对象。
        工厂模式:配置文件
    
    3.技术点:
        threading.local的作用
        装饰器调用时要加functools.warps等
        栈的使用

为什么栈要通过线程id来进行区分?
    因为在flask中可以开启多线程的模式,当开启多线程模式进行处理用户请求时。
    需要将线程之间的数据进行隔离,以防止数据混乱。
    
    其实也可以使用其他参数,只要能够对所有线程能够区分出来就可以了。但是使用线程id是最简单的。用户名+时间戳(可以在)

flask的Local对象中为什么要维持成一个栈?
    1.在web运行时,栈中的对象只有一个,因为对象进来,在执行完全部功能之后,就会被销毁或者将栈顶的对象删除

    2.写离线脚本并且多个app嵌套的时候才会在栈中出现多个对象。        
        from flask import current_app,g
        from pro_excel import create_app

        app1 = create_app()
        with app1.app_context():  # AppContext对象(app,g) -> local对象
            print(current_app.config) # -1 top app1 
            app2 = create_app()
            with app2.app_context():  # AppContext对象(app,g) -> local对象
                print(current_app.config) # top -1 app2 
            print(current_app.config) # top -1 app1
    注意:flask中很少出现嵌套脚本
复制代码

 

复制代码

 

posted @   thep0st  阅读(145)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示