【问题标题】:flask structure at large app [closed]大型应用程序的烧瓶结构[关闭]
【发布时间】:2016-11-15 06:19:55
【问题描述】:

我有一个带有视图的有点令人毛骨悚然的文件:

from app import app
from flask import request

inspection_handler = None
data_handler = None
repeat_handler = None

@app.route(START_URL + 'inspection/', methods=['GET'])
def inspection():
    return inspection_handler.update(request)


@app.route(START_URL + 'data/', methods=['GET'])
def data():
    return data_handler.update(request)


@app.route(START_URL + 'repeat/', methods=['GET'])
def repeat():
    return repeat_handler.update(request)

另一个模块有这样的代码:

from app.handlers.data.data_handler import DataHandler
import app.views.monitoring as monitoring

monitoring.data_handler = DataHandler()

我认为我确实可以改进第一个模块,但我不知道如何正确地做到这一点。你能帮帮我吗?

【问题讨论】:

  • 这有什么可怕的?此外,你想改进什么?
  • 我有 url - START_URL 的通用统计数据,当我向它添加新路由时,模块变得更大且不可读。我可以更好地使用多态性吗?
  • 如果您需要默认的包结构,请查看Flask - Larger Applications。如果您的应用开始增长,那么坚持下去可能是个好主意。
  • @mike510a 为什么不使用python ?这是一种非常简单的语言,不是吗?

标签: python python-3.x flask


【解决方案1】:

看看flask blueprints,和已经推荐的Flask - Structuring Large Apps

from app import app  
from flask import Blueprint, request


handlers = {
    'inspection': None,
    'data': None,
    'repeat': None
}


handler_page = Blueprint(START_URL, __name__)
# Ideally register this blueprint where you registered your app
app.register_blueprint(handler_page)


@handler_page.route('/<string:handler_type>', methods=['GET'])
def handler_view(handler_type):
    try:
        curr_handler = handlers[handler_type]
    except KeyError:
        return "Not found.", 404
    return curr_handler.update(request)

【讨论】:

  • 哦!那太棒了!但是,如果我有多个 START_URL 怎么办?
  • @faoxis 您可以使用Request 方法进行一些巧妙的重构,例如request.pathrequest.url。然后根据 START_URL 从字典中调用相应的函数。或者您可以简单地注册多个蓝图。此外,这几乎不是问题。在遇到严重问题之前不要考虑结构化。不要修复没有损坏的东西:)
猜你喜欢
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多