【问题标题】:generating flask route from class method从类方法生成烧瓶路线
【发布时间】:2021-04-30 20:31:03
【问题描述】:

我正在尝试使用基本 DI 生成 Flask 路由,即映射方法作为路由处理程序,我是 Flask 的初学者,所以请注意我的基本技能

class myClass():

    def __init__(self):
        self.dbConnObj = DbToolsMySql('someconnection', 'slave')
        self.dbConnObj.connect()
        self.blueprint = Blueprint('myClass', __name__)
        self.blueprint.add_url_rule('/my_method', view_func=self.my_method)

    def my_method(self, event):
        retun "hello"

然后在我的处理程序文件中

from flask import Flask
from flask_restful import Api, Resource
from src.app.services.myClassimport myClass


app = Flask(__name__)
app.register_blueprint(myClass.blueprint)

if __name__ == "main":
    app.run()

很简单啊????但不工作...我收到以下消息

未找到 在服务器上未找到请求的 URL。如果你 手动输入网址,请检查您的拼写并重试。

【问题讨论】:

  • 您在 my_method 中将 return 拼写为 retun。另外,您访问的哪个 URL 会出现此错误?

标签: python python-3.x flask


【解决方案1】:

通常你使用如下装饰器向 Flask 应用添加路由:

app = Flask(__name__)

@app.route('/some-endpoint')
def some_endpoint_handler():
   # do something
   pass

或者你可以像这样不带装饰器添加:

def some_endpoint_handler():
   # do something
   pass

app = Flask(__name__)

app.route('/some-endpoint', methods=['GET'])(some_endpoint_handler)

因此,在您的场景中,您可以将 app.route 调用传递给您的 myClass 对象并像这样设置路由:

class myClass():

    def __init__(self, router):
        self.dbConnObj = DbToolsMySql('someconnection', 'slave')
        self.dbConnObj.connect()
        self.blueprint = Blueprint('myClass', __name__)
        #self.blueprint.add_url_rule('/my_method', view_func=self.my_method)
        router('/my_method', ['GET'])(self.my_method)

    def my_method(self, event):
        retun "hello"

myObj = myClass( app.route )

或者,反转依赖:

app = Flask(__name__)

@app.route(myClass.blueprint.some_endpoint_string)
def some_endpoint_handler():
   myClass.blueprint.call_some_endpoint_handler()
   pass

if __name__ == "main":
    app.run()

【讨论】:

  • @app.route(myClass.blueprint.some_endpoint_string) 你能帮我解释一下这部分吗?
  • 它是 Blueprint 类中的一个道具,代表前端正在命中的端点。在您的示例中,您将设置 self.blueprint.some_endpoint_string = '/my_method'。然后将该字符串传递给 app.route 装饰器函数。应该注意 myClass.blueprint 需要在调用 app.route 装饰器之前进行实例化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多