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中很少出现嵌套脚本
上帝说要有光,于是便有了光;上帝说要有女人,于是便有了女人!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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技术实操系列(六):基于图像分类模型对图像进行分类