我正在用Flask和python2.7编写我的网站后端,遇到了一些问题。我喜欢用类来封装我的函数,它使我的东西变得整洁,并帮助我保持所有的模块化。不过,我遇到的一个问题是,flask用于路由的decorators没有保存自变量。我使用它来访问它所在的类的loadDb方法。见下文。有没有人知道为什么会发生这种情况,知道我该如何解决,或者是否有办法解决?在
class Test(object):
blueprint = Blueprint("Test", __name__)
def __init__(self, db_host, db_port):
self.db_host = db_host
self.db_port = db_port
def loadDb(self):
return Connection(self.db_host, self.db_port)
@blueprint.route("/<var>")
def testView(var): # adding self here gives me an error
return render_template("base.html", myvar=self.loadDb().find({"id": var})
{{1}如果函数中有一个的函数,那么这个函数的作用是相同的。在
让我们看看
route
:https://github.com/mitsuhiko/flask/blob/master/flask/blueprints.py#L155的代码它用几个参数调用
self.add_url_rule
(自身是Blueprint
),其中一个参数在函数中。您需要添加一个规则,方法绑定到Test
(self.testView
)的实例,而不是方法本身(Test.testview
)。这很棘手,因为decorator是在类创建时执行的,在任何实例存在之前。在我可以建议的解决方案是在
Test
的构造器中称自己为blueprint.add_url_rule
(即,在第一点上,Test
的实例是已知的)。在相关问题 更多 >
编程相关推荐