如何在装饰器中获取 Flask 可选 URL 参数?

2024-03-20

我的 Flask API 都使用电话作为可选的 url 参数,如下所示,我想使用装饰器来验证电话号码是否正确。 那么我可以在不解析请求url的情况下在某处获取参数“phone”吗?

@user_api.route("/<phone>/login")
@check_phone
def login(phone):
    f = OrderedDict()
    f['error'] = 0
    return jsonify(f)

@user_api.route("/<phone>/logout")
@check_phone
def logout(phone):
    f = OrderedDict()
    f['error'] = 0
    return jsonify(f)

Werkzeug(和 Flask)中有一个更好的机制来验证内置的 url 值。定义一个转换器 https://werkzeug.palletsprojects.com/en/1.0.x/routing/#custom-converters并像在路线中使用任何其他转换器一样使用它(例如,<int:id>).

from werkzeug.routing import BaseConverter, ValidationError

class PhoneConverter(BaseConverter):
    regex = r'\d{7,10}'  # this validates the basic form of the value

    def to_python(self, value):
        # do more complicated validation
        if not complicated_phone_validation(value):
            raise ValidationError('not a valid phone number')

        return value

app.url_map.converters['phone'] = PhoneConverter

@app.route('/<phone:phone>')
def get_phone(phone):
    # phone is valid

您还可以使用before_request函数使用电话参数验证所有路由,而无需全部装饰。

from flask import request, abort

@app.before_request
def valid_phone():
    if 'phone' not in request.view_args:
        return  # view has no phone arg

    if not complicated_phone_validation(request.view_args['phone']):
        abort(404)

@app.route('/<phone>')
def get_phone(phone):
    # phone is valid

@app.route('/<other>')
def get_other(other):
    # no phone arg, no validation

如果您确实想使用装饰器,则可以使用参数调用装饰函数。

from functools import wraps

def check_phone(f):
    @wraps(f)
    def inner(**kwargs):
        phone = kwargs['phone']
        # do some validation
        return f(**kwargs)

    return inner

@app.route('/<phone>')
@check_phone
def get_phone(phone):
    # phone is valid

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

如何在装饰器中获取 Flask 可选 URL 参数? 的相关文章

  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

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

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 如何使用 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

随机推荐

  • 在 C++ 中将对象数组设置为 null

    假设我有一个 C 中 Foo 类型的对象数组 Foo array 10 在 Java 中 我可以简单地通过以下方式将此数组中的对象设置为 null array 0 null the first one 我怎样才能在 C 中做到这一点 使用指
  • PHPStorm中Code Sniffer触发的Xdebug

    我在安装 PHPStorm 时 xdebug 和 Code Sniffer 都工作得很好 但真正烦人的部分是 调试器现在似乎将 Code Sniffer 错误视为断点 并中断代码 让我知道样式警告 尝试测试代码 如何防止 Code Snif
  • Firestore存储大小限制如何存储大型数组

    我有一个收藏users userID followers该用户 ID 是 firebase UID 因此长度为 29 个字节 字符串大小的计算方式为 UTF 8 编码字节数 1 在每个用户文档中 我都有一个名为 follower 的数组和另
  • 解析 DateFormat 时的 Java 时区

    我的代码解析日期如下 String ALT DATE TIME FORMAT yyyy MM dd T HH mm ss SSSZ SimpleDateFormat sdf new SimpleDateFormat ALT DATE TIM
  • android AppWidget 未添加到 Lollipop 上的主屏幕

    我开发了一个应用程序 可以在主屏幕小部件上显示新闻源 由于以下情况 在 Lollipop 之前的 Android 设备上一切正常 用户进入启动器的小部件屏幕以选择 添加特定的小部件 用户单击 MyNewsWidget 以添加到其主屏幕 调用
  • 让 div 占据另一个 div 后剩余的所有空间

    我有两个并排的 div 第一个包含一个可能相当长的文本字段 另一个包含一个很短的数字 我需要第一个 div 占据所有可用空间 而无需拉伸父级并在必要时进行剪切 Ant 它应该考虑第二个 div 的宽度 因此 如果文本的长度很短 那么两个 d
  • linuxrc 的用途是什么以及 rootfs 中是否需要它?

    Question 我的问题是 什么是linuxrc做 我需要它吗 rootfs 和使用有什么关系吗systemd vs initd 背景 我目前正在尝试建立一个rootfs适用于使用 Yocto 的 ARM 7 处理器 我对原始 BSP 项
  • docx4j - 删除 wml P 元素

    我正在使用 docx4j 来处理 Microsoft Word 模板 我想知道如何删除或隐藏模板中的 P 元素 我能够遍历代码来获取特定的 P 元素 现在我需要知道如何删除或隐藏该 P 元素 有人可以帮忙吗 我使用以下代码获取所有 P 元素
  • 按 Enter 键提交搜索?

    当有人按下 回车 键时 需要做什么才能提交此表单
  • Visual Studio 弹出窗口:“操作无法完成”

    当我尝试打开一个项目时 无论是本地项目还是在团队基础服务器 https en wikipedia org wiki Team Foundation Server TFS 我得到一个模态窗口告诉我 操作无法完成 未指定的错误 或者相同的消息
  • 内存怎么这么大?

    我有一个 1000x1500 像素位图 我想在 Android 中制作一个可变副本 当我运行以下代码时 int width original getWidth 1000px int height original getHeight 150
  • C++中的restrict关键字是什么意思?

    我总是不确定 restrict关键字在C 中意味着什么 这是否意味着赋予函数的两个或多个指针不重叠 还有什么意思呢 在他的论文中 内存优化 https web archive org web 20160422113037 http www
  • 如何在 sunos 中获取附加到特定端口的进程 ID

    我正在尝试在 SunOS 上使用端口 7085 连接进程 我尝试执行以下命令 netstat ntlp grep 7085没有返回任何东西 netstat anop grep 7085也尝试过这个 此开关在 SunOs 中无效 我得到以下输
  • numpy:有效地添加矩阵的行

    我有一个矩阵 mat array 0 1 2 3 4 5 6 7 8 9 10 11 我想获得某些索引处的行的总和 例如 ixs np array 0 2 0 0 0 1 1 我知道我可以将答案计算为 mat ixs sum axis 0
  • 如何在不使用登录系统的情况下识别唯一用户(iOS)

    我需要一种方法来识别我的应用程序的用户 但没有登录系统 我研究了 UUID 它为我的问题提供了部分答案 但由于它不是真正的 UDID 因此它不是 真正唯一的 如果用户重新安装应用程序 他会获得一个新的 UUID 这可以 不为我工作 有什么方
  • 如何使用flex4使用前置摄像头

    我使用 Flex 4 为 Android 移动设备开发了简单的相机应用程序 问题是 当我运行该应用程序时 它使用后置摄像头 它没有使用前置摄像头 怎么换相机啊 我需要使用前置摄像头来实现此应用程序 请帮助我 var camera Camer
  • 不是动态选择字段 WTFORMS 的有效选择

    我目前正在使用 WTFORMS 创建动态选择字段 但是它从未提交并且验证失败并出现以下错误 Not a valid choice 我的字段是这样创建的 area SelectField 在视图中 我从数据库中获取选项 如下所示 form M
  • 外部元素边距不等于内部元素边距

    我正在使用 Android WebView 来显示我的应用程序的 HTML 内容 我需要动态查找元素 通常是 div 的完整高度 包括填充 边距和边框 我正在使用 JavaScript 无法使用 jQuery 我一直在使用scrollHei
  • 如何在多租户数据库中设置唯一约束

    这是一个多租户应用程序 所有记录都有一个客户 ID 来分隔客户数据 客户可以在此表中插入自己的数据并设置自己的唯一约束 每个客户都可以对 15 个字段中的任何一个字段设置唯一约束 也可以不设置任何约束 因此 在实际表上设置唯一约束是行不通的
  • 如何在装饰器中获取 Flask 可选 URL 参数?

    我的 Flask API 都使用电话作为可选的 url 参数 如下所示 我想使用装饰器来验证电话号码是否正确 那么我可以在不解析请求url的情况下在某处获取参数 phone 吗 user api route