How to pass class#39;s self through a flask.Blueprint.route decorator?(如何通过flask.Blueprint.route修饰器传递类本身?)
本文介绍了如何通过flask.Blueprint.route修饰器传递类本身?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用Flask和Python2.7编写我的网站的后端,遇到了一些问题。我喜欢使用类来封装我的函数,它使我的事情变得整洁,并帮助我保持一切模块化。然而,我遇到的一个问题是,用于布线的装饰者烧瓶不能保留自变量。我使用它来访问它所在的类的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})
推荐答案
如果添加self
,则会出现错误,因为该方法的工作方式与装饰符的函数相同,而烧瓶不需要第一个参数为self
的函数。
我们来看看route
:https://github.com/pallets/flask/blob/master/src/flask/blueprints.py#L52
self.add_url_rule
(self是Blueprint
),其中一个在函数中。您需要的是添加一个将方法绑定到Test
(self.testView
)实例的规则,而不是方法本身(Test.testview
)。这很棘手,因为装饰符是在创建类时执行的,而不是在任何实例存在之前。
除了避免将您的视图作为类的方法外,我可以建议的解决方案是在Test
的构造函数中称自己为blueprint.add_url_rule
(即,在第一个点上Test
的实例是已知的。
这篇关于如何通过flask.Blueprint.route修饰器传递类本身?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何通过flask.Blueprint.route修饰器传递类本身?
基础教程推荐
猜你喜欢
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01