flask第十二篇——自定义url转换器【2】
继续昨天的话题,今天我们来写一个手机号的转换器,方便大家理解
我们在`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开发是不行的。大家和我一起加油吧。
请关注微信公众号:自动化测试实战,查看更好的排版及图片