Flask 路由模式匹配顺序

2023-11-24

鉴于Flask 路由不是从上到下进行模式匹配的,如何处理以下问题?

我有以下路线:

  1. /<poll_key>/close
  2. /<poll_key>/<participant_key>

如果我提出请求http://localhost:5000/example-poll-key/close,Flask 将其匹配为模式 2,将字符串 'close' 分配给<participant_key>网址参数。我怎样才能使<poll_key>/close路由在之前匹配<participant_key> route?


参见我对同一问题的另一个回答:https://stackoverflow.com/a/17146563/880326.

看起来最好的解决方案是添加您自己的转换器并创建路线

/<poll_key>/close
/<poll_key>/<no(close):participant_key>

哪里的no转换器已定义

class NoConverter(BaseConverter):

    def __init__(self, map, *items):
        BaseConverter.__init__(self, map)
        self.items = items

    def to_python(self, value):
        if value in self.items:
            raise ValidationError()
        return value

Update:

我错过了match_compare_key:

  1. for static端点:(True, -2, [(0, -6), (1, 200)])
  2. for /<poll_key>/close: (True, -2, [(1, 100), (0, -5)])
  3. for /<poll_key>/<participant_key>: (True, -2, [(1, 100), (1, 100)])

这意味着static比其他人具有更高的优先级并且close优先级高于<participant_key>.

Example:

from flask import Flask

app = Flask(__name__)
app.add_url_rule('/<poll_key>/close', 'close',
                 lambda **kwargs: 'close\t' + str(kwargs))
app.add_url_rule('/<poll_key>/<participant_key>', 'p_key',
                 lambda **kwargs: 'p_key\t' + str(kwargs))


client = app.test_client()

print client.get('/example-poll-key/close').data
print client.get('/example-poll-key/example-participant-key').data

这输出:

close   {'poll_key': u'example-poll-key'}
p_key   {'participant_key': u'example-participant-key', 'poll_key': u'example-poll-key'}

看起来这是正确的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask 路由模式匹配顺序 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 对大文本值进行小幅编辑时如何有效地使用 gettext PO 文件

    寻找有关如何在对大 msgid 值进行小编辑时有效使用 gettext PO 文件的提示和 或工具 示例 我们有大量多句子 多段落消息存储在 PO 消息目录文件中 如果我们对消息进行非常小的更改 也许是编辑单个句子 甚至更正标点符号 那么当
  • 在 Swift 中,如何从内存中完全删除 UIView?

    请考虑以下代码 class myManager var aView UIView func createView aView UIView func removeView aView nil anything else 如果我创建一个UIV
  • T-SQL:当长度 > VarChar(MAX) 时,如何比较 XML 类型的两个变量?

    仅使用 SQL Server 2008 R2 这将位于存储过程中 如何确定 XML 类型的两个变量是否等效 这是我想做的 DECLARE XmlA XML DECLARE XmlB XML SET XmlA Really long Xml
  • xdebug断点失败

    以通常的方式庆祝建立一个新的测试服务器 通过寻求帮助让 xdebug 工作 Server Ubuntu 服务器 16 10 Nginx PHP 7 Xdebug 设置的要求如下http php built com installing xd
  • 在水豚中选择具有多个类的元素

    我正在使用 Selenium 在 Capybara 中编写自动化代码 我的 HTML 中有以下元素 我想在水豚中单击该元素 a href class classA classB click me a 目前 工作方式如下 find class
  • 多重继承会导致虚假的、不明确的虚函数重载

    在这个例子中 类Foo and Bar由图书馆提供 我的课Baz继承两者 struct Foo void do stuff int int struct Bar virtual void do stuff float 0 struct Ba
  • .Net 的开源代理库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找一个开源的 Ne
  • 将 []byte 转换为小/大端有符号整数或浮点数?

    我能够转换 byte转换为无符号整数 a binary LittleEndian Uint16 sampleA b binary BigEndian Uint32 sampleB 这利用了 Go 包中的 Big Endian 和 Littl
  • 我应该关闭JNDI获取的数据源吗?

    更新 显然 Tomcat 从 7 0 11 开始 为您关闭了数据源 因此它在 web 应用程序的 contextDestroyed 中不可用 看 https issues apache org bugzilla show bug cgi i
  • objdump - head ELF - 标志的含义?

    objdump f a out a out file format elf32 i386 architecture i386 flags 0x00000112 EXEC P HAS SYMS D PAGED start address 0x
  • C# 中的流重用

    我一直在尝试一个我认为很简单的想法 我希望能够从某个地方 网站 文件系统 ftp 读取文件 对其执行一些操作 压缩 加密等 然后将其保存在某个地方 可能是文件系统 ftp 或其他任何地方 这是基本的管道设计 我想做的就是读入文件并将其放入
  • 仅通过存储过程强制 INSERT

    使用 SQL Server 2008 是否有一种方法允许仅通过存储过程插入表 如果可以 如何实现 EDIT 最好的方法可能是马丁 史密斯的建议 即使用代替插入扳机 这个问题的直接答案是 marc s 的 GRANT 和 DENY 答案 尽管
  • java中删除和重命名文件

    我在java中创建了一个文件 file1 我读取了该 file1 并对从 file1 读取的数据进行了一些更改 然后将新数据写入另一个文件 file2 现在我需要的是删除以前的文件 file1 并将文件 file2 的名称更改为 file1
  • 创建动态 html 表单

    我想创建一个动态变化的表单 我有一个用于创建项目的表单 包含以下字段 project name project description 并且该项目可以具有任意数量 大于或等于 0 的类别 我想要的是显示一个按钮 让用户可以选择添加另一个类别
  • 删除 Lucene.net 中的所有索引

    我想删除all之前创建的索引 我在用Lucene net 我尝试了以下方法 Term term new Term empty because I want to delete all the indices IndexReader rdr
  • 仅当字符为 Firebird 2.5 上的数字时才转换为 Int

    我有一个在 MySQL 数据库上使用的查询 该查询对结果进行排序 在可能的情况下 当 char 字符串是数字时 将 char 数据库字段转换为整数 因此例如ORDER BY我在 MySQL 上使用的子句是 ORDER BY CASE WHE
  • 如何在刷新页面时抑制重新发布 - ASP.NET MVC

    我正在使用 asp net mvc 构建一个向导 目前 当用户点击下一个 或上一个 时 表单值将被发布到一个操作 该操作执行所需的任何处理 然后呈现下一个视图 我遇到的问题是 如果用户在新视图中点击刷新 他们会被提示重新发布表单值 这会导致
  • 兼容 x86 的英特尔至强融核加速器中是否有 SIMD(SSE / AVX) 指令?

    x86 兼容加速器 MIC Intel Xeon Phi 中是否有 SIMD SSE AVX 指令 http en wikipedia org wiki Xeon Phi 是的 最新一代的英特尔至强融核协处理器 代号 骑士角 缩写 KNC
  • 如何使用伪 CGO 指令在子目录中添加 C 文件作为 go build 的一部分?

    根据文档 go buildwith cgo 将在包的根目录中添加任何 C C 文件作为编译的一部分 有没有办法使用 CGO 指令使给定子目录中的 C C 文件以及根目录中的文件也成为编译的一部分 并不真地 您唯一的选择是将子目录设为另一个
  • Flask 路由模式匹配顺序

    鉴于Flask 路由不是从上到下进行模式匹配的 如何处理以下问题 我有以下路线