码迷,mamicode.com
首页 > Web开发 > 详细

5_自定义url路由转换器

时间:2019-10-07 19:17:12      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:stc   map   校验   重写   form   for   表达式   使用   mat   

自定义URL转换器

自定义URL转换器的方式:

  1. 必须实现一个类,继承自BaseConverter(werkzeug.routing.BaseConverter)。
  2. 在自定义的类中,重写regex,也就是这个变量的正则表达式。
  3. 将自定义的类,添加到app.url_map.converters上,如:
# 普通转换器
class MobileConverter(BaseConverter):
    regex = r'1[3-9]\d{9}'
app.url_map.converters['mobile'] = MobileConverter    # 添加mobile转换器,  添加了后, 则可以在url中使用 `mobile` 这个转换器了

@app.router('/<mobile:mobile>/')
def my_mobile(mobile):
    return '我的手机号码为: {}'.format(mobile)
# 自定义路由转换器
from flask import Flask
from werkzeug.routing import BaseConverter

app = Flask(__name__)
app.config.update(DEBUG=True)


# 1. 定义自己的转换器, 万能正则转换器
class RegexConverter(BaseConverter):
    """正则路由转换器"""
    def __init__(self, map, regex):
        super().__init__(map)
        # 将正则表达式的参数保存到对象的属性中, flask会去使用这个属性来进行路由的匹配
        self.regex = regex

# 2. 将自定义的转换器添加到Flask的应用中
app.url_map.converters['re'] = RegexConverter

@app.route('/send/<re(r"1[3-9]\d{9}"):mobile>/')   # 使用
def send_sms(mobile):
    return 'send sms to {}'.format(mobile)

# --------------------------
class MobileConverter(BaseConverter):
    """普通转换器, 专用于校验手机号码"""
    def __init__(self, map):
        super().__init__(map)   # 父类调用不调用,对这个我感觉没有影响
        self.regex = r'1[3-9]\d{9}'
app.url_map.converters['mobile'] = MobileConverter

@app.route('/<mobile:mobile>/')
def mobile(mobile):
    return 'moible: {}'.format(mobile)


if __name__ == "__main__":
    app.run(port=8000)

to_python的作用:

在转换器类中,实现to_python(self, value)方法,这个方法的返回值,将会传递到view视图函数中作为参数.

class ListConverter(BaseConverter):
    def to_python(self, value):
        # return value.split('+')
        return 'hello'

app.url_map.converters['list'] = ListConverter

@app.route('/posts/<list:boards>/')
def boards(boards):
    return '您提交的模块是: {}'.format(boards)

# 访问:http://127.0.0.1:8000/posts/a+b/
# 返回结果为: 您提交的模块是: hello  # 第二个 return 'hello'
### 返回结果为: 您提交的模块是: ['a', 'b']   # 第一个return value.split('+')

to_url 的作用:

在转换器类中,实现to_url(self, value)方法,这个方法的返回值,将会在调用url_for函数的时候生成符合要求的URL形式.

5_自定义url路由转换器

标签:stc   map   校验   重写   form   for   表达式   使用   mat   

原文地址:https://www.cnblogs.com/nichengshishaonian/p/11631664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!