根据具体的需求,有些时候是需要用到正则来灵活匹配URL,但是Flask的路由匹配机制是不能直接在路由里直接写正则的,这时候就需要使用转换器!

Flask的默认转换器:

DEFAULT_CONVERTERS = {
‘default’: UnicodeConverter,
‘string’: UnicodeConverter,
‘any’: AnyConverter,
‘path’: PathConverter,
‘int’: IntegerConverter,
‘float’: FloatConverter,
‘uuid’: UUIDConverter,}

具体用法如下:

@app.route(‘/pp/<int:p_id>’)
def demo(p_id):

return ‘demo %s’ % pr_id

但很多时候默认的装换器并不能满足具体的使用,所以很多时候需要自定义转换器:

from werkzeug.routing import BaseConverter

# 1. 定义一个自己的转换器类
class RegexConverter(BaseConverter):
def __init__(self, url_map, regex):
# 调用父类的初始化方法
super(RegexConverter, self).__init__(url_map)
# 将正则表达式的参数保存到对象的属性中,flask会去使用这个属性来进行路由的正则匹配
self.regex = regex # 2. 将自定义的转换器添加到flask的应用中
app.url_map.converters["re"] = RegexConverter # 3. 先利用自定义的re来匹配一个手机号
# 127.0.0.1:5000/send/18437505329
@app.route("send/<re(r'1[34578]\d{9}'):mobile>")
def send_sms(mobile):
return "send sms to %s" % mobile

这样我们就可以通过正则匹配拿到相对应的手机号,但要值得注意的是,这个值是通过我们自己继承BaseConverter这个类里面的to_python这个方法返回的,如果想要进行获取到的号码进行筛选,则可以重写to_python这个方法。

# 假设我们要将手机号的前三位返回出来:如下
def to_python(self, value):
value = int(str(value)[:3])
return value 结果: 在网页中就会显示 send sms to 184

在BaseConvert中还有一个重要的方法就是to_url方法,这个方法主要就是通过url_for来调用的,个人想了很久,还是不知道如何利用文字解释出来,只能截图。靠大家自己理解了。主要的作用就是改变自己给url_for传递的参数。

flask自定义转换器的更多相关文章

  1. Flask自定义转换器,实现路由匹配正则表达式参数

    Flask框架动态路由实现参数传递和Django框架有类似之处,但是相比于Django框架,Flask实现复杂的参数就需要自己自定义转换器来实现了,而不能向Django那样直接使用正则表达式 # 路由 ...

  2. flask 自定义转换器

    from flask import Flask from flask import url_for from flask import redirect from werkzeug.routing i ...

  3. Flask基础(07)-->正则自定义转换器

    正则自定义转换器 为什么要自定义正则转换器? 因为默认转换器太过于笨重,往往不能满足我们实际业务的需求,这时候我们就需要自定义正则转换器了. 那么我们怎么自定义正则转换器呢? from flask i ...

  4. spring mvc 自定义转换器

    <!-- 注册转化器 --> <mvc:annotation-driven conversion-service="conversionService" /> ...

  5. Struts2 请求数据的自动封装 及 自定义转换器类

    请求数据自动封装: 实现原理:使用了参数拦截器.struts-default.xml中 <interceptor name="params" class="com. ...

  6. struts2自定义转换器

    Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...

  7. Spring -- 自定义转换器

    Spring 定义了 3 种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到 ConversionServiceFactoryBean 中: Converter<S,T> ...

  8. Retrofit 2.0基于OKHttp更高效更快的网络框架 以及自定义转换器

    时间关系,本文就 Retrofit 2.0的简单使用 做讲解  至于原理以后有空再去分析 项目全面.简单.易懂  地址: 关于Retrofit 2.0的简单使用如下:  https://gitee.c ...

  9. 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

    一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...

随机推荐

  1. ★Pandas 零碎知识

    1 修改属性 1.1 修改1列的类型属性: df['总金额'] = pd.to_numeric(df['总金额']) #转变dataframe的1列为数值型 1.2 多列设为数值型:(使用DataFr ...

  2. Spring IOC 注入方式详解 附代码

    引言 Spring框架作为优秀的开源框架之一,深受各大Java开发者的追捧,相信对于大家来说并不陌生,Spring之所以这么流行,少不了他的两大核心技术IOC和IOP.我们这里重点讲述Spring框架 ...

  3. 绘制COCO数据集结果

    import os import time import datetime import mmcv import cv2 as cv import json import numpy as np im ...

  4. 《温故而知新》JAVA基础二

    基本条件语句 switch语句,case匹配后会执行匹配的代码,如果没有break语句,会继续执行后面的语句,直到遇到break和程序结束为止 2.while循环 1. whie(){ do some ...

  5. Windows Server 2008环境下Apache2.4+Tomcat8配置

    安装步骤 1. 安装配置JDK2. 安装配置Apache3. 安装配置Tomcat4. 启动服务并测试 一.Apache安装与配置 1.Apache解压在D盘根目录下建立一个文件夹Apache Gro ...

  6. ASP.NET Core Swagger 显示接口注释

    在Startup中 services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Info { Title ...

  7. cmd 查看端口

    windows + R 调出cmd窗口 输入 netstat -nao 查看端口使用情况 输入netstat -nao | findstr 80查找指定端口 杀死指定端口的进程taskkill /pi ...

  8. English trip EM2-LP-5A Food Teacher:Lamb

    课上内容(Lesson) 1. Do you know any of these foods? Yes I do. There are  hot pepper(小辣椒), a clove of gar ...

  9. Android24以上拍照代码

    public void takePic(){ //创建File对象,用于存储拍照后的照片 File outputImage = new File(getExternalCacheDir()," ...

  10. SpringMVC+Shiro整合配置文件详解

    http://blog.csdn.net/dawangxiong123/article/details/53020424