zoukankan      html  css  js  c++  java
  • Python-Flask-定义正则转换器匹配路由参数

    第一种:

    from flask import Flask
    from werkzeug.routing import BaseConverter


    class RegexCoverter(BaseConverter):
    """自定义正则的转换器"""
    regex = "[0-9]{6}"

    app = Flask(__name__)

    #将自己的转换器添加到默认的转换器列表中
    app.url_map.converters['re'] = RegexCoverter

    @app.route('/')
    def index():
    return 'index'

    @app.route('/demo1/<re:user_id>')
    def demo1(user_id):
    return '用户ID是:%s' % user_id

    if __name__ == '__main__':
    app.run(debug=True)

    第二种:

    from flask import Flask
    from flask import redirect
    from flask import url_for
    from werkzeug.routing import BaseConverter


    class RegexConverter(BaseConverter):
    """自定义正则的转换器"""

    def __init__(self, url_map, *args):
    super(RegexConverter, self).__init__(url_map)
    # 取到第1个参数,给regex属性赋值
    self.regex = args[0]


    class ListConverter(BaseConverter):
    """自己定义转换器"""
    regex = "(\d+,?)+\d$"

    def to_python(self, value):
    """当匹配到参数之后,对参数做进一步处理之后,再返回给视图函数中"""
    return value.split(',')

    def to_url(self, value):
    """使用url_for的时候,对视图函数传的参数进行处理,处理完毕之后以便能够进行路由匹配"""
    result = ','.join(str(v) for v in value)
    return result


    app = Flask(__name__)
    # 将自己的转换器添加到默认的转换器列表中
    app.url_map.converters["re"] = RegexConverter
    app.url_map.converters["list"] = ListConverter


    @app.route('/')
    def index():
    return 'index'


    # 规则:/user/6位数字 [0-9]{6}
    # 自定义转换器

    @app.route('/user/<re("[0-9]{6}"):user_id>')
    def demo1(user_id):
    return '用户id是 %s' % user_id


    @app.route('/users/<list:user_ids>')
    def demo2(user_ids):
    # 如果才能在视图函数中接收到的 user_ids 就是一个列表
    return "用户的id列表是 %s" % user_ids


    @app.route('/demo3')
    def demo3():
    return redirect(url_for('demo2', user_ids=[1, 3, 4, 5]))


    if __name__ == '__main__':
    app.run(debug=True)

  • 相关阅读:
    变分自编码器(Variational Autoencoder, VAE)通俗教程
    神经网络图灵机(Neural Turing Machines, NTM)
    【Java设计模式】单例模式
    SupportV7包中 SwipeRefreshLayout 修改下拉控件的距离
    eclipse项目导入androidstudio
    LiveWriter Test
    【Android学习】XML文本的三种解析方式(通过搭建本地的Web项目提供XML文件)
    【百度地图学习-一】初始化以及TextOverlay
    【Android学习】四种布局方式
    【Android学习】数据传递三种方式
  • 原文地址:https://www.cnblogs.com/wf8998/p/13293502.html
Copyright © 2011-2022 走看看