### 自定义转换器
在 `app` 目录下新建 `utils` 工具目录,在 `utils` 下新建 `commons.py` 文件
* 在 `app/utiles/commons.py` 文件中录入如下代码
```
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
from werkzeug.routing import BaseConverter
# 自定义转换器
class ReCoverter(BaseConverter):
def __init__(self, url_map, regex):
# 调用父类的初始化方法
super(ReCoverter, self).__init__(url_map)
# 保存正则表达式
self.regex = regex
```
改造我们创建应用的工厂函数,为 flask 添加我们自定义的转换器
```
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
from flask import Flask
from config import config_map
from app.utils.commons import ReCoverter
# 工厂模式
def create_app(config_name):
app = Flask(__name__)
# 设置 flask 的配置信息
config_class = config_map[config_name]
app.config.from_object(config_class)
# 为 flask 添加自定义的转换器
app.url_map.converters["re"] = ReCoverter
# 注册蓝图
from app import api_1_0
app.register_blueprint(api_1_0.bp, url_prefix="/api/v1.0")
# 如果只是接口,可以不注册 admin 模块
from app import admin
app.register_blueprint(admin.bp, url_prefix="/admin")
return app
```
## 使用自定义转换器
* 为 `app/api_1_0/controller` 下的 `index.py` 录入如下代码
```
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
from app.api_1_0 import bp
@bp.route('/mymobile/<re(r"1[3-9]\d{9}"):mobile>')
def mymobile(mobile):
return mobile
```