Flask 类
初始化参数
- import_name: 应用程序包的名称
- static_url_path: 可用于为Web上的静态文件指定其他路径。默认为
static_folder
文件夹的名称。 - static_folder: 访问
static_url_path
提供的静态文件的文件夹的路由。默认为'static'
应用程序根路径中的文件夹 - static_host: 添加静态路由时要使用的主机。默认为无。
host_matching=True
与static_folder
配置一起使用时是必需的。 - host_matching: 设置
url_map.host_matching
属性。默认为False。 - subdomain_matching: 考虑
SERVER_NAME
匹配路由时相对于的子域 。默认为False。 - template_folder: 包含应用程序应使用的模板的文件夹。默认为
'templates'
应用程序根路径中的文件夹 - instance_path: 应用程序的替代实例路径。默认情况
'instance'
下,包或模块旁边的文件夹被假定为实例路径。 - instance_relative_config: 如果设置为
True
用于加载配置的相对文件名,则假定是相对于实例路径而不是应用程序根目录。 - root_path: 默认情况下,Flask会自动计算到应用程序根目录的路径。在某些情况下,这是无法实现的(例如,如果程序包是Python 3名称空间程序包),则需要手动定义
容器
- after_request_funcs = {}
- 包含每个请求后应调用的功能列表的字典。字典的键是此功能
None
针对所有请求激活的蓝图的名称。例如,这可以用于关闭数据库连接。要在此处注册功能,请使用after_request()
装饰器
- 包含每个请求后应调用的功能列表的字典。字典的键是此功能
- app_ctx_globals_class = _AppCtxGlobals
- before_first_request_funcs = [] # 第一个请求的时候执行, 请求钩子
- before_request_funcs = {} # 每次请求前, 存储请求钩子函数名的容器
- blueprints = {} # 存储所有的蓝图容器
- config # 配置字典为
Config
。这的行为与常规字典完全一样,但是支持从文件加载配置的其他方法 - config_class # Config
- default_config # 默认的配置字典
- env # 应用程序在什么环境中运行。Flask和扩展程序可能会根据环境启用行为,例如启用调试模式。这映射到
ENV
配置键。这是由FLASK_ENV
环境变量,如果在代码中设置,则可能无法按预期方式运行。默认:'production'
- error_handler_spec = {} # 所有已注册错误处理程序的字典。该键
None
用于在应用程序上活动的错误处理程序,否则,该键是蓝图的名称。每个键都指向另一个词典,该键是http异常的状态代码。特殊键None
指向一个元组列表,其中第一项是实例检查的类,第二项是错误处理程序函数。 - extensions = {} # 扩展可以存储应用程序特定状态的地方。例如,扩展可以在其中存储数据库引擎和类似内容
- secret_key # 如果设置了密钥,则加密组件可以使用它来签名Cookie和其他内容。例如,当您要使用安全cookie时,请将其设置为复杂的随机值。
- session_cookie_name # 安全cookie使用它作为会话cookie的名称
- teardown_appcontext_funcs = [] # 销毁应用程序上下文时调用的函数列表。由于如果请求结束,应用程序上下文也会被拆除,因此这里是存储与数据库断开连接的代码的地方。
- teardown_request_funcs = {} # 一个字典,其中包含在每次请求后都会调用的功能列表,即使发生异常也是如此。字典的键是此功能
None
针对所有请求激活的蓝图的名称 。不允许这些函数修改请求,并且它们的返回值将被忽略。如果在处理请求时发生异常,它将被传递给每个teardown_request函数。要在此处注册功能,请使用teardown_request()
装饰器。 - template_context_processors = {None: [_default_template_ctx_processor]} # 具有不带参数调用的函数列表的字典,以填充模板上下文。字典的键是此功能
None
针对所有请求激活的蓝图的名称。每个返回一个字典,用于更新模板上下文。要在此处注册功能,请使用context_processor()
装饰器。 函数为了处理模板的上下文。返回 g, request, session。 保存在一个字典中 - template_folder = None # 要添加到模板查找中的模板文件的位置。 如果
None
不添加模板 - url_build_error_handlers = [] #
url_for()
引发 时调用的函数列表BuildError
。此处注册的每个函数都带有错误,端点和值。如果一个函数返回None
或引发一个BuildError
下一个函数。 - url_default_functions = {} # 具有可用作URL值预处理程序的功能列表的字典。
None
此处的键用于应用程序范围的回调,否则,键是蓝图的名称。这些函数中的每一个都有机会在将其用作视图函数的关键字参数之前修改URL值的字典。对于注册的每个功能,该功能还应该提供一种url_defaults()
功能,该功能可以自动添加以这种方式删除的参数。 - url_map: 在
Map
此实例。您可以在创建类之后但在连接任何路由之前使用此方法更改路由转换器。 - url_value_preprocessors # 具有在功能之前调用的
before_request_funcs
功能列表的字典 。词典的键是此功能针对或None
针对所有请求均处于活动状态的蓝图名称。要注册功能,请使用url_value_preprocessor()
。 - use_x_sendfile = ConfigAttribute(“USE_X_SENDFILE”) # 如果要使用X-Sendfile功能,请启用此功能。请记住,服务器必须支持这一点。这仅影响使用该
send_file()
方法发送的文件。 - view_functions = {} # 已注册所有视图功能的字典。关键字将是函数名称,这些函数名称也用于生成URL,而值是函数对象本身。要注册视图功能,请使用
route()
装饰器。
方法
- 注册自定义模板过滤器
@setupmethod
def add_template_filter(self, f, name=None):
"""
注册自定义模板过滤器。就像template_filter()装饰器一样工作
@f: 函数名
@name: 过滤器的可选名称,否则将使用函数名称
"""
pass
- 注册自定义模板全局功能
@setupmethod
def add_template_global(self, f, name=None):
"""
注册自定义模板全局功能。就像template_global()装饰器一样工作 。
@name: 全局函数的可选名称,否则将使用函数名称。
"""
pass
- 注册自定义模板测试
@setupmethod
def add_template_test(self, f, name=None):
"""
注册自定义模板测试。就像template_test()装饰器一样工作
@name: 测试的可选名称,否则将使用函数名称。
"""
pass
- 添加 url 规则
@setupmethod
def add_url_rule(
self,
rule,
endpoint=None,
view_func=None,
provide_automatic_options=None,
**options
):
"""
添加 url 规则。 如同 router() 装饰器一样的工作。
@rule: url 的规则字符串
@endpoint: url 规则指向的端点(即通过 url 找到这个 端点), 默认为视图函数名
@view_func: 向提供的端点提供请求时调用的视图函数(即: 根据 url -> endpoint -> view_func)
@Provide_automatic_options: 是否自动为视图函数添加 `OPTIONS` 请求方式。
@options:在创建 Rule 对象的一些额外的参数。
"""
pass
- 每个请求后执行的函数(请求钩子)
@setupmethod
def after_request(self, f):
"""
注册每个请求后要运行的功能。
@f: 被装饰的函数名
"""
pass
- 创建一个 AppContext, 个人感觉是 flask 上下文
def app_context(self):
"""创建一个AppContext。用作with 推送上下文,对于在此应用程序使用current_app很重要。
RequestContext.push() 在处理请求和运行CLI命令时,将自动推送应用程序上下文 。使用此选项可以在这 些情况之外手动创建上下文。
"""
pass
- 查找实例路径
def auto_find_instance_path(self):
"""
尝试查找实例路径(如果未提供给应用程序类的构造函数)。基本上,它将计算instance到主文件或软件包旁边的文件 夹的路径。
"""
pass
- 第一请求是执行的函数(请求钩子)
@setupmethod
def before_first_request(self, f):
"""
注册一个功能,以在对该应用程序实例的第一个请求之前运行。
该函数将不带任何参数地被调用,并且其返回值将被忽略。
"""
pass
- 每次请求前执行的函数(请求钩子)
@setupmethod
def before_request(self, f):
注册要在每个请求之前运行的功能。
例如,这可以用于打开数据库连接,或从会话中加载登录的用户。
该函数将不带任何参数地被调用。如果它返回非None值,则该值的处理就如同它是视图中的返回值一样,不在执行视图 中的值。
pass
- 注册模板上下文处理器
@setupmethod
def context_processor(self, f):
"""注册模板上下文处理器功能。"""
pass
- jinjia2 创建环境创建加载程序
def create_global_jinja_loader(self):
"""
为Jinja2环境创建加载程序。可用于仅覆盖加载程序,并保持其余部分不变。不建议覆盖此功能。相反,应该重写该 jinja_loader()功能。
全局加载程序在应用程序的加载程序和各个蓝图之间调度。
"""
pass
- 根据
jinja_options
应用程序以及与Jinja相关的各种方法创建Jinja环境
def create_jinja_environment(self):
"""
根据jinja_options 应用程序以及与Jinja相关的各种方法创建Jinja环境。jinja_options此后更改 将无效。 还将与Flask相关的全局变量和过滤器添加到环境中。
"""
pass
- 为给定的请求创建 url 适配器
def create_url_adapter(self, request):
"""
为给定请求创建URL适配器。URL适配器是在尚未设置请求上下文的位置创建的,因此可以显式传递请求。
"""
if request is not None: # 对传进来的 request 对象进行处理
# If subdomain matching is disabled (the default), use the
# default subdomain in all cases. This should be the default
# in Werkzeug but it currently does not have that feature.
subdomain = (
(self.url_map.default_subdomain or None)
if not self.subdomain_matching
else None
) # 处理域名
return self.url_map.bind_to_environ(
request.environ,
server_name=self.config["SERVER_NAME"],
subdomain=subdomain,
) # 调用 werkzeug 绑定 当前的 url 和 路由 Map, 返回的是一个路由适配器
if self.config["SERVER_NAME"] is not None:
return self.url_map.bind(
self.config["SERVER_NAME"],
script_name=self.config["APPLICATION_ROOT"],
url_scheme=self.config["PREFERRED_URL_SCHEME"],
)
- 执行调度请求
def dispatch_request(self):
"""
执行请求调度。匹配URL,并返回视图或错误处理程序的返回值。这不必是响应对象。为了将返回值转换为适当的响应 对象,请调用make_response()。
"""
req = _request_ctx_stack.top.request # 取出堆栈中的上下文中的 Request 对象
if req.routing_exception is not None: # 此变量 默认为 None, 目的是在路由匹配失败时候, 抛出异常, 在请求过来压栈的时候设置值的
self.raise_routing_exception(req) # 对异常处理, 抛出异常
rule = req.url_rule # 这个就是 endpoint, 在压栈的时候解析出来的
# if we provide automatic options for this URL and the
# request came with the OPTIONS method, reply automatically
if (
getattr(rule, "provide_automatic_options", False)
and req.method == "OPTIONS"
): # 此时啊 判断是不是 OPTIONS 请求, 有没有为路由自动添加 OPTIONS 方法
return self.make_default_options_response() # 没有的话, 构建默认的请求对象返回
# otherwise dispatch to the handler for that endpoint
return self.view_functions[rule.endpoint](**req.view_args) # 分发路由, 开始执行视图函数
- ~~不知道有啥用
def do_teardown_appcontext(self, exc=_sentinel):
"""
在弹出应用程序上下文之前立即调用。
处理请求时,在请求上下文之后弹出应用程序上下文。请参阅do_teardown_request()。
这将调用用修饰的所有功能 teardown_appcontext()。然后 appcontext_tearing_down发送信号。
这称为 AppContext.pop()。
"""
pass
- !~~ 不知道干啥的
def do_teardown_request(self, exc=_sentinel):
"""
在分派请求并返回响应之后,即在弹出请求上下文之前调用。
这会调用用修饰的所有函数 teardown_request(),以及Blueprint.teardown_request() 蓝图是否处理了请 求。最后, request_tearing_down信号被发送。
这称为 RequestContext.pop(),在测试期间可能会延迟以维持对资源的访问。
参量exc-调度请求时引发的未处理异常。如果未通过,则从当前异常信息中检测到。传递给每个拆卸功能。
"""
pass
- 装饰器,用于将函数注册为端点。
@setupmethod
def endpoint(self, endpoint):
"""
装饰器,用于将函数注册为端点。例:
@endpoint: 端点
"""
pass
- 注册一个函数, 处理异常
@setupmethod
def errorhandler(self, code_or_exception):
"""
注册一个函数以按代码或异常类处理错误。
装饰器,用于注册给定错误代码的功能
@code_or_exception: 异常或者异常状态码
"""
pass
- 调度请求, 执行请求的预处理和后处理以及
HTTP
异常捕获和错误处理
def full_dispatch_request(self):
"""
调度请求,并在此之上执行请求的预处理和后处理以及HTTP异常捕获和错误处理。
"""
self.try_trigger_before_first_request_functions() # 对请求钩子, 第一次请求时执行函数进行处理, _got_first_request 此变量标志着是否是第一次请求, 默认是False。 如果 为False, 将所有的请求钩子执行, 然后将此变量设置为 True。 否则不执行
try:
request_started.send(self) # 设置一个 Namespace对象, request_started: NameSpace 类, 信号机制, 还不知道干嘛用的~~~~~~
rv = self.preprocess_request()
if rv is None: # 如果 befor_request 返回的有响应, 不会再执行路由分发
rv = self.dispatch_request() # 返回没有响应, 进行路由分发
except Exception as e:
rv = self.handle_user_exception(e) # 如果发生了错误, 处理错误
return self.finalize_request(rv) # todo 到这里了
- 如果应用程序开始处理第一个请求, 将此属性设置为
True
@property
def got_first_request(self):
pass
- 处理没有关联的错误处理程序或异常处理引发的异常
def handle_exception(self, e):
"""
处理没有关联的错误处理程序或异常处理程序引发的异常。这总是导致500 InternalServerError。
始终发送got_request_exception信号。
如果propagate_exceptions为True,例如在调试模式下,将重新引发该错误,以便调试器可以显示该错误。否则, 将记录原始异常,并InternalServerError返回。
如果为InternalServerError或 注册了错误处理程序500,则将使用它。为了保持一致,处理程序将始终收到 InternalServerError。原始的未处理的异常可以通过获得e.original_exception。
"""
pass
- 处理
HTTP
异常
def handle_http_exception(self, e):
"""
处理HTTP异常。默认情况下,这将调用已注册的错误处理程序,并退回到作为响应返回异常的位置。
@e: 异常
"""
pass
- 将
异常
和endpoint
绑定
def handle_url_build_error(self, error, endpoint, values):
"""
@error: 异常, 端点, 值
"""
pass
- 异常发生的时候调用此方法
def handle_user_exception(self, e):
"""
每当发生异常时应调用此方法。一种特殊情况HTTPException将转发给该 handle_http_exception()方法。此函 数将返回一个响应值或使用相同的回溯引发异常。
@e: 异常
"""
- 如果绑定的对象有静态文件夹, 返回
Ture
@property
def has_static_folder(self):
"""
"""
pass
- 将给定端点的
url
默认值直接注入到传递值的字典中
def inject_url_defaults(self, endpoint, values):
"""
@endpoint: 端点
@values: 值
"""
pass
- 按照注册的顺序, 遍历所有的蓝图
def iter_blueprints(self):
"""
按照注册的顺序遍历所有蓝图。
"""
pass
- 加载模板的
Jinja
环境
@locked_cached_property
def jinja_env(self):
"""
用于加载模板的Jinja环境。
首次访问此属性时创建环境。jinja_options在那之后进行更改将无效。
"""
pass
- 用于
Flask
构造函数创建config
属性
def make_config(self, instance_relative=False):
"""
用于由Flask构造函数创建config属性。所述instance_relative参数在从瓶(有命名的传入构造 instance_relative_config)和指示是否配置应该是相对于实例路径或应用程序的根路径。
"""
root_path = self.root_path # 根目录位 application 根目录, app 所在的目录
if instance_relative: # 如果使用了实例配置, root_path 为实例 config 路径
root_path = self.instance_path
defaults = dict(self.default_config) # 将默认的配置转换为字典
defaults["ENV"] = get_env() # 从环境变量总获取运行环境, 默认为生产环境
defaults["DEBUG"] = get_debug_flag() # 从环境变量中获取是否开启debug, 默认为 False
return self.config_class(root_path, defaults) # 转化为 Config 类, Config 类继承自 dict
- 创建默认的
OPTIONS
响应.
def make_default_options_response(self):
"""
调用此方法以创建默认OPTIONS响应。这可以通过子类化来更改,以更改OPTIONS响应的默认行为。
"""
pass
- 创建缺少会话的新实例
def make_null_session(self):
"""
创建缺少会话的新实例。建议不要替换此方法,而不是覆盖此方法session_interface。
"""
pass
- 将视图函数的返回值转化为
Response
实例
def make_response(self, rv):
"""
将视图函数的返回值转化为 `Response` 实例
@rv: 从视图函数返回的 resp。 不允许为 None。
"""
pass
- 返回 交互
shell
应用程序的shell
上下文
def make_shell_context(self):
"""
返回 交互`shell`应用程序的`shell` 上下文
"""
pass
- 从应用程序的实例文件夹(
instance_path
)中打开资源
def open_instance_resource(self, resource, mode="rb"):
"""
从应用程序的实例文件夹(instance_path)中打开资源
@resource: 要访问子文件夹中的资源,请使用正斜杠作为分隔符。
@mode: 资源文件打开模式,默认为'rb'。
"""
pass
- 创建或者打开一个新的对象
def open_session(self, request):
"""
创建或打开一个新会话。默认实现将所有会话数据存储在签名的Cookie中。这需要 secret_key设置。建议不要替换 此方法,而不是覆盖此方法session_interface。
@request: Request 对象
"""
pass
- 在调度请求之前使用
def preprocess_request(self):
"""
在调度请求之前调用。url_value_preprocessors在应用程序和当前蓝图上注册的呼叫 (如果有)。然后调用 before_request_funcs 在应用程序和蓝图中注册的电话。
如果有任何before_request()处理程序返回一个非值,则该值的处理就好像它是视图中的返回值一样,并且进一步的 请求处理将停止。
"""
bp = _request_ctx_stack.top.request.blueprint # 这是一个蓝图的名称, 或者是一个 None
funcs = self.url_value_preprocessors.get(None, ()) # 查看有没有蓝图的请求钩子, 在befor_request 请求钩子之前执行, 暂时没用到, 不知道干嘛的, 感觉也是个请求钩子
if bp is not None and bp in self.url_value_preprocessors:
funcs = chain(funcs, self.url_value_preprocessors[bp]) # chain(): 返回一个迭代器,
for func in funcs:
func(request.endpoint, request.view_args)
funcs = self.before_request_funcs.get(None, ()) # 这个就是请求钩子 befor_request, 执行这个请求钩子, 如果没有返回值, 返回None,; 否则返回 响应值
if bp is not None and bp in self.before_request_funcs:
funcs = chain(funcs, self.before_request_funcs[bp])
for func in funcs:
rv = func()
if rv is not None:
return rv
- 在获取到
response
后调用
def process_response(self, response):
"""
可以覆盖该字段,以便在将响应对象发送到WSGI服务器之前对其进行修改。默认情况下,它将调用所有 after_request()修饰的函数。
@reponse: Response 对象
"""
pass
- 注册蓝图
@setupmethod
def register_blueprint(self, blueprint, **options):
"""
Blueprint在应用程序上注册一个。传递给此方法的关键字参数将覆盖在蓝图上设置的默认值
将蓝图注册到 application 后, 调用 蓝图的 register 方法
@blueprint: 要注册的蓝图
@url_prefix: 蓝图路由的前缀
@subdomain: 蓝图匹配的子域名
@url_defaults: 蓝图路由会将这些默认值用作视图参数。
@options: 其他关键字参数传递给 BlueprintSetupState。可以在record()回调中访问它们。
"""
pass
- 注册错误类
@setupmethod
def register_error_handler(self, code_or_exception, f):
"""
errorhandler() 装饰器的替代错误附加功能,对于非装饰器使用而言更直接易用。
"""
pass
- 创建一个
Request
上下文
def request_context(self, environ):
"""
创建一个RequestContext代表WSGI环境。使用一个with块来推送上下文,这将request针对此请求。
请参见请求情境。
通常,您不应从自己的代码中调用它。wsgi_app()处理请求时,请求上下文由推送。使用 test_request_context()创造环境和背景,而不是这个方法。
@environ: wsgi 环境
"""
return RequestContext(self, environ) # 创建一个 RequestContest 实例对象, 有__enter__, __exit__, 会将当前的request上下文压入堆栈中, 结束时, 弹出来。包含了 app 实例, 一个根据 环境变量(environ) 创建的一个 Request 对象, 一个当前请求路由适配器。
- 添加路由装饰器
def route(self, rule, **options):
"""
装饰器,用于注册给定URL规则的视图功能。这样做与add_url_rule() 装饰器用途相同,但旨在供装饰器使用:
@rule: URL规则为字符串
@endpoint: 已注册URL规则的端点。Flask本身假定视图函数的名称为端点
@options: 要转发到基础Rule对象的选项 。对Werkzeug的更改是对方法选项的处理。方法是方法此规则应限于 (列表GET,POST等等)。默认情况下,规则仅监听GET(并隐式HEAD)。从Flask 0.6开始, OPTIONS由标准请求处理隐式添加和处理。
"""
pass
- 在本地开发服务器上运行应用程序
def run(self, host=None, port=None, debug=None, load_dotenv=True, **options):
"""
在本地开发服务器上运行该应用程序。
不要run()在生产环境中使用。它无意满足生产服务器的安全性和性能要求。相反,请参阅部署方式以获取WSGI服务器 建议。
如果debug设置了该标志,则服务器将自动重新加载代码以进行更改,并在发生异常的情况下显示调试器。
如果要在调试模式下运行应用程序,但在交互式调试器上禁用代码执行,则可以将其use_evalex=False作为参数传递 。这将使调试器的“回溯”屏幕保持活动状态,但会禁用代码执行。
不建议使用此功能进行自动重载的开发,因为对此功能的支持很差。相反,您应该使用flask命令行脚本的run支持。
@host: 主机监听名称
@port: 服务器端口
@debug: 调试模式
@load_dotenv: 加载最近的.env和.flaskenv 文件以设置环境变量。还将工作目录更改为包含找到的第一个文件 的目录。
@options: 要转发到基础Werkzeug服务器的选项。
"""
pass
- 保存 session
def save_session(self, session, response):
"""
session: 要保存的 session(Type: SecureCookie)
response: Response 实例对象
"""
pass
- 将静态文件发送到浏览器的功能
def send_static_file(self, filename):
"""
内部用于将静态文件从静态文件夹发送到浏览器的功能。
@filename: 文件名称
"""
pass
- 是否拆解体统中的错误
def should_ignore_error(self, error):
"""
调用此方法可以确定是否应该忽略拆解系统中的错误。如果此函数返回,True则不会传递拆卸处理程序错误。
"""
pass
- 注册应用上下文
@setupmethod
def teardown_appcontext(self, f):
"""
ctx = app.app_context()
ctx.push()
...
ctx.pop()
注册当应用程序上下文结束时要调用的函数。当请求上下文弹出时,通常也会调用这些函数。
当ctx.pop()在上面的例子中被执行时,拆卸功能刚刚从有效上下文的堆栈中的应用程序上下文动作前调用。如果您在 测试中使用此类构造,则这变得很重要。
由于请求上下文通常还管理应用程序上下文,因此当您弹出请求上下文时也会调用它。
当由于未处理的异常而调用了拆解函数时,它将被传递一个错误对象。如果errorhandler()注册了,它将处理该异 常,并且拆解将不会收到它。
拆卸功能的返回值将被忽略。
"""
pass
- 注册一个请求结束时运行的函数(请求钩子)
@setupmethod
def teardown_request(self, f):
"""
注册一个要在每个请求结束时运行的函数,而不管是否存在异常。即使未执行实际请求,当弹出请求上下文时也会执行这 些功能。
例:
ctx = app.test_request_context()
ctx.push()
...
ctx.pop()
当ctx.pop()在上面的例子中被执行时,拆卸功能刚刚从有效上下文的堆栈中的请求上下文移动之前调用。如果您在测 试中使用此类构造,则这变得很重要。
通常,拆卸功能必须采取所有必要步骤,以免失败。如果他们确实执行了可能失败的代码,则必须用try / except语 句包围这些代码的执行,并记录发生的错误。
当由于异常而调用拆解函数时,它将被传递一个错误对象。
拆卸功能的返回值将被忽略。
"""
pass
- 用于注册自定义模板过滤器
@setupmethod
def template_filter(self, name=None):
"""
装饰器,用于注册自定义模板过滤器。您可以为过滤器指定一个名称,否则将使用函数名称。例:
@app.template_filter()
def reverse(s):
return s[::-1]
参量
name –过滤器的可选名称,否则将使用函数名称。
"""
- 注册自定义全局模板功能
@setupmethod
def template_global(self, name=None):
"""
装饰器,用于注册自定义模板全局功能。您可以为全局函数指定一个名称,否则将使用该函数名称。例:
@app.template_global()
def double(n):
return 2 * n
参量
name –全局函数的可选名称,否则将使用函数名称。
"""
pass
- url 回调函数默认为应用程序的所有视图功能
@setupmethod
def url_defaults(self, f):
"""
URL的回调函数默认为应用程序的所有视图功能。它使用端点和值进行调用,并且应该更新就地传递的值。
"""
pass
- 为应用程序中的所有视图功能注册 Url 值预处理器功能
@setupmethod
def url_value_preprocessor(self, f):
"""
为应用程序中的所有视图功能注册URL值预处理器功能。这些功能将在before_request()功能之前被调用 。
该函数可以修改从匹配的url捕获的值,然后再将其传递到视图。例如,可以将其用于弹出公共语言代码值并将其放入g 而不是将其传递给每个视图。
该函数将传递端点名称和值dict。返回值将被忽略。
"""
pass
WSGI 应用程序
def wsgi_app(self, environ, start_response):
"""
实际的WSGI应用程序。未实现此功能, __call__()因此可以应用中间件而不会丢失对app对象的引用。而不是这样 做:
app = MyMiddleware(app)
最好这样做:
app.wsgi_app = MyMiddleware(app.wsgi_app)
这样,您仍然可以得到原始的应用程序对象,并可以继续在其上调用方法。
@environ: WSGI环境。
@start_response: 可调用的接受状态码,标头列表以及可选的异常上下文的可调用对象,以启动响应。
"""
ctx = self.request_context(environ) # 一个reuqet 上下文, RequestContext 实例
error = None
try:
try:
ctx.push() # 给 request 上下文 压入堆栈
response = self.full_dispatch_request() # 路由
except Exception as e:
error = e
response = self.handle_exception(e)
except: # noqa: B001
error = sys.exc_info()[1]
raise
return response(environ, start_response)
finally:
if self.should_ignore_error(error):
error = None
ctx.auto_pop(error)
蓝图对象
初始化变量
- name: 蓝图的名称。将在每个端点名称之前。
- import_name: 蓝图包的名称,通常为
__name__
。这有助于找到root_path
该蓝图。 - static_folder: 包含静态文件的文件夹,该文件应由蓝图的静态路由提供。该路径相对于蓝图的根路径。蓝图静态文件默认为禁用 。
- static_url_path: 用于提供静态文件的URL。默认为
static_folder
。如果该蓝图没有url_prefix
,则该应用程序的静态路由将优先,并且该蓝图的静态文件将不可访问。 - template_folder: 带有模板的文件夹,应将其添加到应用程序的模板搜索路径中。该路径相对于蓝图的根路径。蓝图模板默认为禁用。蓝图模板的优先级低于应用程序模板文件夹中的优先级。
- url_prefix: 前缀在所有蓝图URL上的路径,以使其与应用程序的其余路由区分开。
- subdomain: 默认情况下,蓝图路由将匹配的子域
- url_defaults: 默认情况下,蓝图路由将接收的默认值
- root_path: 默认情况下,蓝图将基于
import_name
。在某些情况下,此自动检测可能会失败,因此可以手动指定路径。
方法
- 添加自定义模板过滤器
def add_app_template_filter(self, f, name=None):
"""
注册自定义模板过滤器,适用于整个应用程序。就像 Flask.add_template_filter()但为了一个蓝图。就像 app_template_filter()装饰器一样工作。
@name: 过滤器的可选名称,否则将使用函数名称
"""
pass
- 在整个应用程序范围内全局注册自定义模板
def add_app_template_global(self, f, name=None):
"""
在整个应用程序范围内全局注册自定义模板。就像 Flask.add_template_global()但为了一个蓝图。就像 app_template_global()装饰器一样工作。
@name: 全局的可选名称,否则将使用函数名称
"""
pass
- 蓝图增加路由规则
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
"""
就像Flask.add_url_rule()但为了一个蓝图。该url_for()函数的端点以蓝图的名称为前缀。
"""
pass
- 结束之后,执行的函数
def after_app_request(self, f):
"""
就像Flask.after_request()但为了一个蓝图。即使在蓝图之外,在每个请求之后也会执行这样的功能。
"""
pass
- 执行蓝图后执行
def after_request(self, f):
"""
就像Flask.after_request()但为了一个蓝图。仅在该蓝图功能处理的每个请求之后才执行该功能。
"""
pass
- 处理异常
def app_errorhandler(self, code):
"""
就像Flask.errorhandler()但为了一个蓝图。该处理程序用于所有请求,即使在蓝图之外。
"""
pass
- 在执行蓝图之前执行, 只适用于蓝图
def before_request(self, f):
"""
就像Flask.before_request()但为了一个蓝图。该功能仅在该蓝图功能处理的每个请求之前执行。
"""
pass
- 为视图函数注册一个终端
def endpoint(self, endpoint):
"""
就像Flask.endpoint()但为了一个蓝图。这不会为端点添加蓝图名称,这必须由此方法的用户显式完成。如果端点以 开头。它会被注册到当前的蓝图,否则它是一个与应用程序无关的端点。
"""
pass
- 注册一个仅针对该蓝图变为活动状态的错误处理程序
def errorhandler(self, code_or_exception):
"""
注册一个仅针对该蓝图变为活动状态的错误处理程序。请注意,路由不会发生在蓝图本地,因此404的错误处理程序通常 不会由蓝图处理,除非它是在视图函数内部引起的。另一个特殊情况是总是从应用程序中查找500内部服务器错误。
否则,将用作对象的errorhandler()装饰器Flask。
"""
pass
- 注册蓝图是调用的函数
def record(self, func):
"""
注册在应用程序中注册蓝图时调用的函数。调用该函数时,将状态作为make_setup_state() 方法返回的参数。
"""
pass
- 将功能包装在另一个功能中,这将确保该功能仅被调用一次
def record_once(self, func):
"""
和 record()的工作方式类似,但是将功能包装在另一个功能中,这将确保该功能仅被调用一次。如果在应用程序上第 二次注册了该蓝图,则不会调用传递的函数。
"""
pass
- 在
application
上注册所有蓝图的view
def register(self, app, options, first_registration=False):
"""
由调用,Flask.register_blueprint()以将蓝图上注册的所有视图和回调注册到应用程序。创建一个, BlueprintSetupState并使用调用每个record()回调。
@app: 正在向其注册蓝图的应用程序
@options: 从转发的关键字参数 register_blueprint()
@first_registration: 这是此蓝图第一次在应用程序上注册
"""
pass
- 注册蓝图的错误处理
def register_error_handler(self, code_or_exception, f):
"""
errorhandler()错误附加功能的非修饰符版本,类似于对象的register_error_handler() 应用程序范围的功 能,Flask但仅限于此蓝图的错误处理程序。
"""
pass
- 蓝图注册路由
def route(self, rule, **options):
"""
和 Flask.route() 作用一样的, 在蓝图中使用, 路由指向的 endpoint 会加上蓝图的名称为前缀
"""
pass
- 蓝图执行过后执行
def teardown_request(self, f):
"""
就像Flask.teardown_request()但为了一个蓝图。仅在拆解该蓝图功能处理的请求时才执行此功能。当弹出请求上 下文时,即使没有执行任何实际请求,也会执行拆解请求功能。
"""
- URL的回调函数是此蓝图的默认值
def url_defaults(self, f):
"""
URL的回调函数是此蓝图的默认值。它使用端点和值进行调用,并且应该更新就地传递的值。
"""
- 注册一个函数作为 URL 值预处理函数.
def url_value_preprocessor(self, f):
"""
为此蓝图注册一个函数作为URL值预处理器。在调用视图函数之前先调用它,并且可以修改提供的url值。
"""
pass
linux
信号机制
SIGINT 当键盘按下CTRL+C从shell中发出信号,信号被传递给 shell 中前台运行的进程,对应该信号的默认操作是中断 (INTERRUPT) 该进程。
SIGQUIT 当键盘按下CTRL+\从shell中发出信号,信号被传递给 shell 中前台运行的进程,对应该信号的默认操作是退出 (QUIT) 该进程。
SIGTSTP 当键盘按下CTRL+Z从shell中发出信号,信号被传递给 shell 中前台运行的进程,对应该信号的默认操作是暂停 (STOP) 该进程。
SIGCONT 用于通知暂停的进程继续。
SIGALRM 起到定时器的作用,通常是程序在一定的时间之后才生成该信号。
Python
信号机制
signal() # 创建信号
connect() # 注册一个函数使用Signal.connect()方法注册一个函数,每当触发信号的时候,就会调用该函数。该函数以触发信号的对象作为参数,这个函数其实就是信号订阅者。 connect()传递一个可选的参数,以便限制订阅者只能订阅特定发送者。
send() # 方法通知信号订阅者