Flask源代码--Flask构造函数

一个最基本的flask结构

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "<h1>Hello, World!</h1>"

if __name__ == '__main__':
    app.run()

首先是调用Flask构造函数创建一个app实例,这个实例其实就是WSGI应用程序。我们可以用它来注册view函数,URL规则,模板配置等。而这个构造函数的参数,其实是一个package_name(程序主模块或者包的名字),用这个名字来确定根目录,确定了根目录,我们才能根据这个找到资源的相对位置,是相对位置

Class Flask(object):
    def __init__(self, package_name):
        ...
        self.package_name = package_name  #这里记住可以是包的名字也可以是模块的名字
        self.root_path = _get_package_path(self.package_name)

这个_get_package_path()函数是这样的,给定一个名字,如果是模块名,就返回该模块所属包的路径,如果不是模块名,也就代表着package_name是包的名字,就返回当前工作目录。
这里写图片描述
注:

  1. sys.modules是导入的模块字典,键是模块名,值是位置。
  2. os.path.dirname(file):获取当前文件的目录名(不包含文件本身), 如os.file: user/lib/python27/a.py
    os.path.dirname(file): user/lib/python27
    os.path.abspath(os.path.dirname(file)): C://user/lib/python27

确定了根目录,我们就可以据此找到资源文件的相对位置

弄清楚了参数name,再来看Flask类还初始化了什么

self.debug = False  #调试模式
self.view_function = {}  #存放视图函数
self.error_handlers = {}  #存放错误处理器
self.before_request_func = []  #存放请求前钩子函数
self.after_request_func = []  #存放请求结束钩子函数
self.template_context_processors = [_default_template_context_processors]   #存放模板上下文处理器
self.url_map = Map()    #存放URL映射,反应URL和view的关系

添加一个静态URL映射以及访问规则
这里写图片描述

存放Jinja环境
这里写图片描述

以上就是Flask类的初始化内容,当然,Flask类中还有其他的变量,比如指定静态文件的路径static_path = ‘/static’, 秘钥secret_key = None等.当然,也定义了一些方法,比如app.run()的run方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值