Flask请求准备阶段
请求准备阶段
项目初始化阶段 1. app=Flask(__name__) 实力化一个Flask对象执行__init__方法,做了一些初始化的操作 1.1 对app对象封装一些初始化的值。 app.static_url_path app.static_folder app.template_folder 1.2 添加静态文件的路由 self.add_url_rule( self.static_url_path + "/<path:filename>", endpoint="static", host=static_host, view_func=self.send_static_file, ) 1.3 实例化了app.url_map,app.confing以及app.view_functions的对象, app.url_map对象:以后在map对象中放 【/index/ 函数的对象应观】 app.confing对象:处理flask的配置信息 app.view_functions对象:endpoint和函数的对应关系,放到view_functions 1.4 封装完之后 class Flask(object): url_rule_class = Rule url_map_class = Map def __init__(self...): self.static_url_path self.static_folder self.template_folder self.view_functions = {} self.url_map = Map()--->self.url_map_class() self.config = self.make_config(instance_relative_config) 总结: 执行__init__一共封装了好多东西 1.静态文件路径的封装 2.模板路静的封装 3.配置文件的对象(有的话,就封装) 4.实例化了url_map的对象,因为还没执行到路由,所以为空 5.以及endpoint和函数的对应关系的封装,里面有一个静态文件的对应关系 2.加载配置文件的流程 app.config.from_object('xx.xx') 在from_object方法里面,通过importlib模块将配置文件加载进来, 然后通过rsplit进行切割,获取到配置变大写,放到self[key] = getattr(obj, key) 其中的self[key]中的self是app.config,也就是调用者,所以执行self[key]=app.config[key]=Config()[key] ----》config_class 但是一个Config()[key]就相当于Config对象(key),也就是要执行Config对象的from_object 总结: 1. 读取配置文件中的所有键值对,并将键值对全都放到Config对象。(Config是一个字典) 2. 把包含所有配置文件的Config对象,赋值给 app.config 3. 以后就可以获取所有的配置文件 项目运行阶段: 3.添加路由映射 @app.route('/index') def index(): return 'hello world' 1. 将 url = /index 和 methods = [GET,POST] 和 endpoint = "index"封装到Rule对象 2. 将Rule对象添加到 app.url_map中。 3. 把endpoint和函数的对应关系放到 app.view_functions中。 4.运行flask过程 from flask import Flask app = Flask(__name__,static_url_path='/xx') @app.route('/index') def index(): return 'hello world' if __name__ == '__main__': app.run()
过程: 1. 内部调用werkzeug的run_simple,内部创建socket,监听IP和端口,等待用户请求到来。 2. 一旦有用户请求,执行app.__call__方法。 class Flask(object): def __call__(self,envion,start_response): pass def run(self): run_simple(host, port, self, **options) if __name__ == '__main__': app.run()
https://www.cnblogs.com/p0st/p/11908509.html(1.根据flask源码反推werkaueg的服务器的返回值)
上帝说要有光,于是便有了光;上帝说要有女人,于是便有了女人!
【推荐】国内首个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技术实操系列(六):基于图像分类模型对图像进行分类