当前位置: 代码迷 >> 综合 >> flask 自定义URL转换器
  详细解决方案

flask 自定义URL转换器

热度:99   发布时间:2023-11-27 21:52:38.0

自定义URL转换的的步骤和使用

自定义URL转换to_python的使用

自定义转换器中to_url的使用

1. 自定义URL转换的的步骤和使用

from flask import Flask

from werkzeug.routing import BaseConverter

"""  

自定义url转换器的步骤

转换器是一个类,必须继承自 werkzeug.routing.BaseConverer

1. 实现一个类,继承自 BaseConverter

2. 在自定义的类中,重写‘regex’,也就是这变量的正则表达式

3.将自定义的类,映射到‘app.url_map.converters’上,可理解为加入字典DEFAULT_CONVERTERS中

比如:app.url_map.converter['tel']=TelephoneConverter

"""

app = Flask(__name__)

# 需求:自定义转换器   希望路径中能匹配一个电话号码类型的参数

class TelephoneConverter(BaseConverter):

    regex=r'1[3456789]\d{9}'

app.url_map.converters['tel']=TelephoneConverter

# 使用自定义转换器 实现需求

@app.route('/tel/<tel:num>/')

def my_tel(num):

    return '{}'.format(num)


 

if __name__=='__main__':

    app.run()

2.自定义URL转换to_python的使用

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

from flask import Flask

from werkzeug.routing import BaseConverter


 

app = Flask(__name__)

class Li(BaseConverter):

    def to_python(self, value):

        return value

app.url_map.converters['li']=Li


 

@app.route('/li/<li:num>/')

def my_tel(num):

    return '{}'.format(num)

if __name__=='__main__':

    app.run()

3.自定义转换器中to_url的使用

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

url_for函数是构建url

from flask import Flask,url_for

from werkzeug.routing import BaseConverter


 

app = Flask(__name__)

class Li(BaseConverter):

    def to_python(self, value):

        return value

    def to_url(self, value):

        return 'hello'

app.url_map.converters['li']=Li


 

@app.route('/li/<li:num>/')

def my_tel(num):

    return '{}'.format(num) 

@app.route('/hel/')

def hello():

    args = url_for('my_tel',num='15851115701')

    return '{}'.format(args)

if __name__=='__main__':

    app.run()