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的服务器的返回值)
复制代码

 

posted @   thep0st  阅读(44)  评论(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技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示