继续昨天的话题,今天我们来写一个手机号的转换器,方便大家理解

我们在`BaseConverter`源码里看到好多这种正则表达式:

正则表达式的目的就是规范匹配的规则,现在我们写一个简单的匹配手机号的正则,但是手机号不管是在`to_python`里还是在`to_url`里都是一个字符串,所以这次我们就不需要重写这两个方法了:

# coding: utf-8

from flask import Flask
from werkzeug.routing import BaseConverter
import flask app = Flask(__name__)  # type: Flask
app.debug = True # 根目录
@app.route('/')
def hello_world():    return 'Hello World!' class ListConverter(BaseConverter):    def to_python(self, values):
       """
       将url中的参数转换为我们需要的数据类型
       """
       # split方法就是去掉加号并返回list类型数据
       tmp = values.split('+')
       return tmp
   
   def to_url(self, values):
       """
       将[1,2,3]转换成1+2+3
       """
       # 遍历列表values中的数据,以+连接,最后tmp1的值即1+2+3
       tmp1 = '+'.join([BaseConverter.to_url(self, value) for value in values])
       return tmp1 class PhoneConverter(BaseConverter):
   regex = r'1\d{10}' # 将写好的类注册到DEFAULT_CONVERTERS
app.url_map.converters['list'] = ListConverter
app.url_map.converters['phone'] = PhoneConverter @app.route('/detail/<list:params>/')
def detail(params):
   print 'params:%s' % params    
   return 'success for url' @app.route('/phone/<phone:telephone>/')
def phoneNumber(telephone):
   print telephone    
   return telephone if __name__ == '__main__':
   app.run()

执行代码后看到:

昨天的代码我同样保留了,希望大家可以做一下对比。

为避免大家认识不到,说一下代码里需要注意的地方

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

这里的phone要和@app.route('/phone/<phone:telephone>/')里面的传参类型一致。就是说这两个红色的字符串是要相同的。

  • 正则表达式

船长一直想学正则,无奈找不到好的教程,船长有时间会继续找找,如果找到了且学会了,会及时和大家分享的。

身体不舒服,今天就说这么多了,希望大家有时间好好看看,我是觉得虽然是测试,但是要想成为真正的大神不会点Python开发是不行的。大家和我一起加油吧。

请关注微信公众号:自动化测试实战,查看更好的排版及图片

flask第十二篇——自定义url转换器【2】的更多相关文章

  1. flask第十一篇——自定义url转换器

    首先和大家说一下flask的组成,flask其实是werkzeug(路由和http处理)+SQLAlchemy(数据库)+Jinja2(模板)组成的,今天我们要看到的东西就是`werkzeug`里面的 ...

  2. flask第二十二篇——模板【4】过滤器

    请关注微信公众号:自动化测试实战 先来教大家一个pycharm设置默认模板的方法.我们每次新建模板或者平时写代码打开以后可能都要重复写# coding: utf-8这些代码,其实我们可以设置好模板,让 ...

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

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

  4. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  5. 第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  6. 【译】第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  7. 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

    SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...

  8. Egret入门学习日记 --- 第十二篇(书中 5.1节 内容)

    第十二篇(书中 5.1节 内容) 昨天把 第4章完成了. 今天来看第5章. 接下来是 5.1节 的内容. 总结一下 5.1节 的重点: 1.如何制作一个公用按钮皮肤. 跟着做: 重点1:如何制作一个公 ...

  9. Spring Cloud第十二篇 | 消息总线Bus

    ​ ​本文是Spring Cloud专栏的第十二篇文章,了解前十一篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring ...

随机推荐

  1. PIL.Image与Base64 String的互相转换

    https://www.jianshu.com/p/2ff8e6f98257 PIL.Image与Base64 String的互相转换 mona_alwyn 2018.01.18 19:02* 字数 ...

  2. Daper返回DataTable

    using (IDbConnection conn = OpenConnection()) { string sql = "SELECT TOP 1 * FROM dbo.Students& ...

  3. SEA 教程

    Sina App Engine(SAE)教程(11)- Yaf使用 Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用 Sina App Engine(SAE)入门教 ...

  4. VS2017编译项目出现提示al.exe运行失败的解决方法

    VS2013中编译一切正常,用VS2017打开项目,某个类库出现al.exe运行失败的解决方法,事件查看器中这样描述 “C:\Program Files (x86)\Microsoft SDKs\Wi ...

  5. Ubuntu 14.04配置虚拟主机

    虚拟主机常用于在一个单独的IP地址上提供多个域名的网站服务.如果有人想在单个VPS的单个IP地址运行多个网站,这是非常有用的.在这个教程中,让我告诉你如何设置在Ubuntu 14.04 LTS的Apa ...

  6. 以普通用户启动的Vim如何保存需要root权限的文件

    在Linux上工作的朋友很可能遇到过这样一种情况,当你用Vim编辑完一个文件时,运行:wq保存退出,突然蹦出一个错误: E45: 'readonly' option is set (add ! to ...

  7. PWA web应用模型

    2018年的第一篇博客,最近都去挤图书馆了,希望新年新气象... 简介 PWA 是一门Google推出的web前端新技术,全称是Progressive Web App,是Google在2015年提出, ...

  8. Zeratul的完美区间(线段树||RMQ模板题)

    原题大意:原题链接 给定元素无重复数组,查询给定区间内元素是否连续 解体思路:由于无重复元素,所以如果区间内元素连续,则该区间内的最大值和最小值之差应该等于区间长度(r-l) 解法一:线段树(模板题) ...

  9. 新添加的DOM节点如何实现动画效果

    如何给新添加的DOM节点加动画效果 最近碰到项目中,在DOM节点中,添加新的 html 后 要有动画效果,一直没能很好地理解,尝试了各种方式,终于找出来了 简化版结构 代码如下 使用jq1.9以上版本 ...

  10. js中的真值和假值

    大多数编程语言中,布尔值true和false仅仅表示true/false.JavaScript中,如'Hello‘这样的字符串值,也可以看做true. 以下是不同数据类型在JavaScript中是如何 ...