从类方法生成烧瓶路线

时间:2021-04-30 20:31:03

标签: python python-3.x flask

我正在尝试使用基本 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()

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

<块引用>

Not Found 在服务器上找不到请求的 URL。如果你 手动输入网址,请检查拼写,然后重试。

1 个答案:

答案 0 :(得分:0)

通常您会使用如下装饰器向 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()