gpt4 book ai didi

python - 装饰器如何绑定(bind)到 Flask 应用程序实例?

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:42 24 4
gpt4 key购买 nike

我的情况是我想用 Apache2 运行一个 Flask 应用程序,目前如果我按照任何 Flask 教程所说的那样运行,一切正常。我的问题是我不明白装饰器(即路由器)是如何绑定(bind)到 Flask 应用程序的,而且在这方面,教程和 Flask 自己的文档都没有任何用处。我已尽力查找有关装饰器(即路由器)如何绑定(bind)到 Flask 应用程序实例的信息,但我一无所获。目前一切都“正常工作”,这对我来说就像是巫术。

也就是说,我的初始应用程序是这样的:

myproject/
app/
__init__.py
routes.py
myproject.wsgi

其中 __init__.py 有以下内容:

from flask import Flask
app = Flask(__name__)
from app import routes

routes.py 包含以下内容:

from app import app
@app.route('/')
@app.route('/index')
def index():
return 'Hello, World!'

myproject.wsgi有以下内容:

import sys
sys.path.insert(0, '/var/www/test')
from app import app as application

现在,我的应用程序有所增长,我想为其实现正常工作的单元测试。我的 tests 文件夹与 myproject 位于同一根目录中。

我不清楚的是,当我从 myproject 导入 app 进行测试时,它是否自动具有 中的装饰器分配给它的功能>路线.py?如果是这样,为什么以及如何工作?如果没有,我如何测试分配给带有装饰器的应用程序的功能?后者可能仅在我需要测试 POST 请求时才重要。

另外,有人能告诉我为什么几乎在每个 Flask 教程中,应用程序,即 app 都构建在项目的 __init__.py 文件中吗?在 app.py 文件或类似文件中初始化它不是更容易吗?

我已尽力查找有关装饰器(即路由器)如何绑定(bind)到 Flask 应用程序实例的信息,但我一无所获。目前,Flask 中的一切“正常工作”似乎就像巫术一样

最佳答案

这是如何实现的:

class Flask:
def __init__(self):
self.routes = {}

def route(self, uri):
def wrapper(func):
self.routes[uri] = func
return func
return wrapper

app = Flask()

@app.route("/")
def index():
return "hello"

route 装饰器只是将函数 func 添加到 self.routes 字典中,并返回相同的函数。所以这只是一种更奇特的方式:

def index():
return "hello"

app.routes['/'] = index

@app.route('/')
def index():
return "hello"

只是一个语法糖:

def index():
return "hello"

index = app.route('/')(index)

关于python - 装饰器如何绑定(bind)到 Flask 应用程序实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59336237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com