这样做是没有意义的。您将通过子类
Flask更改其内部行为,而不是将路由定义为类方法。
相反,您正在寻找蓝图和应用程序工厂模式。蓝图将您的视图分为几类,而不需要任何应用程序,并且工厂只有在调用时才创建和设置应用程序。
my_app/users/__init__.py
from flask import Blueprintbp = Blueprint('users', __name__, url_prefix='/users')my_app/users/views.py
from flask import render_templatefrom my_app.users import bp@bp.route('/')def index(): return render_template('users/index.html')my_app/__init__.py
def create_app(): app = Flask(__name__) # set up the app here # for example, register a blueprint from my_app.users import bp app.register_blueprint(bp) return app
run.py
from my_app import create_appapp = create_app()
使用以下命令运行开发服务器:
FLASK_APP=run.pyFLASK_DEBUG=Trueflask run
如果您需要访问视图中的应用程序,请使用
current_app,就像
request在视图中访问请求一样。
from flask import current_appfrom itsdangerous import URLSafeSerializer@bp.route('/token')def token(): s = URLSafeSerializer(current_app.secret_key) return s.dumps('secret')如果你 真的
要定义路线的瓶子类的方法,你需要使用
self.add_url_rule的
__init__,而不是局部装饰每条路线。
class MyFlask(Flask): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.add_url_rule('/', view_func=self.index) def index(self): return render_template('index.html')route(和
self)无法使用的原因是因为它是一个实例方法,但是在定义类时没有实例。



