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

获取Flask应用中定义的所有路线的列表

孙书
2023-03-14
问题内容

我有一个复杂的基于Flask的Web应用程序。有许多具有视图功能的单独文件。它们的URL由@app.route('/...')装饰器定义。有没有办法获取我的应用中已声明的所有路线的列表?也许有一些我可以调用该app对象的方法?


问题答案:

应用程序的所有路由都存储在app.url_map的实例上werkzeug.routing.Map。你可以Rule使用以下iter_rules方法遍历实例:

from flask import Flask, url_for

app = Flask(__name__)

def has_no_empty_params(rule):
    defaults = rule.defaults if rule.defaults is not None else ()
    arguments = rule.arguments if rule.arguments is not None else ()
    return len(defaults) >= len(arguments)


@app.route("/site-map")
def site_map():
    links = []
    for rule in app.url_map.iter_rules():
        # Filter out rules we can't navigate to in a browser
        # and rules that require parameters
        if "GET" in rule.methods and has_no_empty_params(rule):
            url = url_for(rule.endpoint, **(rule.defaults or {}))
            links.append((url, rule.endpoint))
    # links is now a list of url, endpoint tuples


 类似资料:
  • 问题内容: 我一直在尝试了解如何生成动态Flask URL。我已经阅读了文档和一些示例,但无法弄清楚为什么此代码不起作用: 我希望将index.html模板提供给,但事实并非如此。我收到一个构建错误。我想念什么? 如果我使用固定路径(如),则一切正常。 问题答案: 你已经拥有了很多东西。你需要做的就是使用语法(或适当的语法)修饰视图函数。 当Flask像你尝试使用的那样从动态路由的URL中提取变量

  • 问题内容: 我有许多以唯一ID 开头和结尾的URL 。我需要能够从URL获取ID,以便可以将一些数据从另一个系统传递到我的Flask应用程序。我如何获得该价值? 问题答案: 你需要一个可变的URL,该URL是通过在URL中添加占位符并在view函数中接受相应的参数来创建的。 通常,URL的各个部分用分隔。 使用url_for生成的URL的网页。 你也可以将值作为查询字符串的一部分传递,并从请求中获

  • 问题内容: 在Flask中,当我为同一功能使用多个路由时,如何知道当前使用的是哪个路由? 例如: 我怎么知道,现在我被称为使用或? 更新 我知道我不想使用它,因为请求可能相当复杂,并且我想在函数中重复路由逻辑。我认为最好的解决方案。 问题答案: 检查触发你的视图的路线的最“轻松”方法是request.url_rule。

  • 问题内容: 我正在开发Flask扩展名,我想从该扩展名在文件系统上项目的根路径中创建目录。 假设我们有这个目录结构 my_folder应该由扩展名动态创建,扩展名是一个测试实用程序,并将被测试的应用程序包装在/ tests目录中。但是,我正在努力确定扩展中项目的根路径。 现在,我试图从运行文件中猜测路径: 一旦在IDE中而不是manage.py中运行测试,这显然会中断。我可以简单地推断出相对于ap

  • 我有一个使用Node.js和Express构建的web应用程序。现在我想列出所有注册的路线及其适当的方法。 例如,如果我执行了 我想检索一个对象(或与之相当的东西),例如: 这可能吗?如果可能,如何实现? 更新:同时,我创建了一个名为get-routes的npm包,它从给定的应用程序中提取路由,解决了这个问题。目前,只支持Express4.x,但我想现在这是可以的。只是通知一下。

  • 问题内容: 获取Oracle中所有表的列表? 问题答案: 假设您有权访问DBA_TABLES数据字典视图。如果您没有这些特权但需要它们,则可以请求DBA显式授予您对该表的特权,或者请求DBA授予您该SELECT ANY DICTIONARY特权或SELECT_CATALOG_ROLE角色(这两者都将允许您查询任何数据字典表) )。当然,您可能希望排除某些模式,例如SYS和模式,SYSTEM而这些模