当前位置: 首页 > 面试题库 >

将Flask类扩展为主应用

段干安和
2023-03-14
问题内容

我正在学习Flask,并且对如何构造代码有些困惑。因此,我尝试如下扩展Flask主类:

from flask import Flask, ...

class App(Flask):
    def __init__(self, import_name, *args, **kwargs):
        super(App, self).__init__(import_name, *args, **kwargs)
请注意,我知道这可能是完全错误的方法。

这样,当我想启动应用程序时,我可以执行以下操作:

app = App(__name__)

if __name__ == '__main__':
    app.run()

这样,我可以在类中对方法和路由进行排序,但是问题是使用自装饰器时:

@route('/')
def home(self, context=None):
    context = context or dict()
    return render_template('home.html', **context)

引发错误为unresolved reference ‘route’。我想这不是我应该构建应用程序的方式。我应该怎么做,或者如何解决错误?


问题答案:

这样做是没有意义的。你将创建子类Flask以更改其内部行为,而不是将路由定义为类方法。

相反,你正在寻找蓝图和应用程序工厂模式。蓝图将视图划分为多个组,而无需使用任何应用程序,并且只有在调用时,工厂才会创建和设置应用程序。

my_app/users/__init__.py

from flask import Blueprint

bp = Blueprint('users', __name__, url_prefix='/users')

my_app/users/views.py

from flask import render_template
from 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_app

app = create_app()

使用以下命令运行开发服务器:

FLASK_APP=run.py
FLASK_DEBUG=True
flask run

如果你需要访问视图中的应用程序,请使用current_app,就像request在视图中访问请求一样。

from flask import current_app
from 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)无法使用的原因是因为它是一个实例方法,但是在定义类时没有实例。



 类似资料:
  • Flask通常被称为微框架,因为核心功能包括基于Werkzeug的WSGI和路由以及基于Jinja2的模板引擎。 此外,Flask框架还支持cookie和会话以及Web助手,如JSON,静态文件等。显然,这对于开发完整的Web应用程序来说还不够。 这是为什么还要Flask扩展插件。 Flask扩展为Flask框架提供了可扩展性。 Flask有大量的扩展可用。 Flask扩展是一个Python模块,

  • Flask 扩展用多种不同的方式扩充 Flask 的功能。比如加入数据库支持和其它的 常见任务。 寻找扩展 Flask Extension Registry 中列出了 Flask 扩展,并且可以通过 easy_install 或 pip 下载。如果你把一个 Flask 扩展添加到 requirements.rst 或 setup.py 文件的依赖关系中,它们通常可以用一个 简单的命令或是在你应用安

  • Flask,一个微框架,通常需要一些重复的步骤来让第三方库工作。因为在很多时候, 这些步骤可以被分离出,来支持多个项目,就有了 Flask Extension Registry 。 如果你想要为还没有的功能创建你自己的 Flask 扩展,这份扩展开发指南会帮助你 在很短的时间内让你的应用跑起来并且感到像用户一样期待你的扩展运转。 剖析扩展 所有的扩展都位于一个叫做 flask_something

  • 我在Android应用程序中有一个配置类,存储在Realm数据库中。我只是按照单例设计模式对其进行了编辑,所以配置只有一个实例。 问题是,该类现在有一个私有构造函数,可以在不调用我的“getInstance”方法的情况下防止实例化。然而,RealmObject似乎需要一个公共构造函数。 难道不可能有一个类使用单例设计模式扩展RealmObject吗? 这仅仅是我必须解释的领域的限制吗? 下面是上下

  • 目的 使用部署配置来部署多个 Pod,并以此扩展缩放应用。 环境 openshift v3.11.16/kubernetes v1.11.0 步骤 创建工程1. CLI 登录到 OCP $ oc login https://master.example.com:8443 -u admin -p admin2. 创建工程 $ oc new-project lab08 创建一个新应用,测试缩放1. 创

  • Flask 是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask 使用 BSD 授权。Flask也被称为 microframework ,因为它使用简单的核心,用 extension 增加其他功能。