专栏首页TestQAFlask支持正则路径匹配

Flask支持正则路径匹配

flask默认情况下是不支持URL的正则匹配的,只会显示的支持几种简单的URL匹配方式:

•default([^/].*?)•string•int•float•path•uuid

而当我们对路径匹配有更高要求的时候,就无法满足我们的需要的;比如:匹配以student_开头后面跟学号的路径。此时就需要使用到正则匹配了。

flask虽然没有显式的支持URL路径的正则匹配,但骨子里还是支持的;并且提供了一个扩展URL路径匹配的接口,我们只要按照要求注册一个URL匹配类即可。

首先,我们需要定义一个正则转换类,该类必须要继承自BaseConverter基类,重点是在init方法中需要把args的第一个参数赋值为regex变量。

from werkzeug.routing import BaseConverter

class RegexConverter(BaseConverter):
    def __init__(self, url_map, *args):
        super(RegexConverter, self).__init__(url_map)
        self.url = url_map
        self.regex = args[0]   # 正则的匹配规则

    def to_python(self, value):
        return value

接着,就可以开始注册已经已经定义好的URL转换类了;方法如下:

from flask import Flask
from RegexConverter import RegexConverter

app = Flask(__name__)
app.url_map.converters['re'] = RegexConverter   # 注册url转换类


@app.route('/<re(r".*"):path>')         # 设置使用正则匹配url的规则
def test(path):
    return path


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

只需2步操作就可以使用正则表达式来匹配url路径了,是不是很方便呢!

为什么说flask骨子里就支持正则匹配url呢,那是因为前面列出的6种flask默认支持的url匹配方式,其本质上就是通过正则规则来实现的。只不过提前帮我们把正则匹配规则写好了而已。

本文分享自微信公众号 - TestQA(testqna),作者:five3

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 记一次性能测试的经历

    工作这么多年,一直专注于自动化和工具研发,对性能方面做的相对少很多。主要还是没有实际的上手机会,没有需求就不能很好的实践,光看几本理论知识的书还是不够的。今天主...

    上帝De助手
  • 合格的“测试开发”需要一颗“产品”的心

    测试开发 - 一个很“神奇”的存在。职位属测试岗位,但干的是开发的活,钱拿的没有开发多,但事一点不比开发操心的少。但今天要讲的却是如何成为一个合格的“测试开发”...

    上帝De助手
  • 必知必会 - 使用kafka之前要掌握的知识

    消息队列是分布式系统架构中不可或缺的基础组件,它主要负责服务间的消息通信和数据传输。市面上有很多的开源消息队列服务可以选择,除了kafka,还有Activemq...

    上帝De助手
  • python学习教程,猜数字游戏开发

    猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。

    python学习教程
  • 分区表场景下的 SQL 优化

    有个表做了分区,每天一个分区。该表上有个查询,经常只查询表中某一天数据,但每次都几乎要扫描整个分区的所有数据,有什么办法进行优化吗?

    叶金荣
  • rest_framework之解析器、路由控制、分页

    人生不如戏
  • 学习编程的你,遇到了Bug该怎么办?

    这里我先回答标题的问题,答案就是:百度! 直接把错误提示复制在搜索栏,用百度搜索。如果没有现成的错误提示,只有模糊的需求,那就整理一下需求,组织一下语言,然后...

    爱吃西瓜的番茄酱
  • golang 日志模块(log)

    copy_left
  • Fiddler抓包6-get请求(url详解)

    前言 上一篇介绍了Composer的功能Fiddler抓包5-接口测试(Composer),可以模拟get和post请求,get请求有些是带参数的,这种比较容...

    上海-悠悠
  • 警方披露Uber撞人案细节,解密Uber自动驾驶系统

    编译 | AI科技大本营 参与 | 林椿眄 编辑 | 明明 美国时间周日晚 10 点左右,Uber 的一辆自动驾驶汽车在亚利桑那州 Tempe 市发生交通事故,...

    AI科技大本营

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动