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

我们在`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. kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式

    今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图: Retrofit是Square公司开发 ...

  2. Attribute 'items' must be an array, a Collection or a Map错误解决!

    唉!真的要说一句话叫做论一串代码的重要性!就是如此的气人!气的牙根痒痒! 前几天刚刚写过SpringMVC之ModelAndView的 jsp值在浏览页面不显示的问题!也是因为这一串代码,但是这一次一 ...

  3. python之数组元素去重

    参考:如何消除一个数组里面的重复元素?(面试题目) 思路,即创建一个新数组,把原数组中的元素逐个添加到新数组中(判断新数组中是否已经包含原数组中的元素,如果没有,把原数组中的元素添加到新数组,如果已经 ...

  4. 获取url参数,替换特殊字符

    function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)( ...

  5. 解决Mybatis配置ORM映射 时分秒都为0

    方法一: Date类型的类成员变量使用java.sql.Timestamp 方法二: Mybatis的映射配置javatype=Timestamp.class

  6. 安装ectouch点击安装按钮无反应

    首先按F12: 看看”控制台“或者”网络“是否说找不到页面404 如果出现404,则是/mobile/index.php?m=install&c=index&a=importing方法 ...

  7. python 细节回顾

    #!/usr/bin/python # -*- coding: UTF-8 -*- for letter in 'Python': # 第一个实例 if letter == 'h': continue ...

  8. spring中aop使用

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查.缓存) Spring的基 ...

  9. bzip2压缩 解压缩

    压缩/解压缩压缩/解压缩之后的文件名称 必须是bz2 首先是  -z   压缩文件-d 解压缩!

  10. iOS开发:MKMapView地图内存持续增加的释放解决办法

    内存持续增加的释放解决办法 最近修改一个用到MKMapView的项目,内存一直占用过多,每次拖拽地图时还会增加占用,且一直无法释放. 经过两天的排查,最后锁定是创建的self.map对象在加载地图的时 ...