一个最基本的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是包的名字,就返回当前工作目录。
注:
- sys.modules是导入的模块字典,键是模块名,值是位置。
- 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方法。