1. 程式人生 > >自定義URL轉換器

自定義URL轉換器

定義自己的url轉換器:

1.實現一個類,繼承'BaseConverter'
2.在自己定義的類中,重寫'regex',也就是這個變數的表示式
3.將自定義的類,對映到'app.url_map.converters'上

需求一:一個url中,含有手機號碼的變數,必須限定這個變數的字串格式滿足手機號碼的格式

from flask import Flask
from werkzeug.routing import BaseConverter

app = Flask(__name__)

class TelephoneConveter(BaseConverter):
    regex = r'1[85734]\d{9}'

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

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/user/<int:user_id>/')
def user_profile(user_id):
    return '您輸入的user_id為:%s' % user_id

@app.route('/telephone/<tel:my_tel>/')
def my_tel(my_tel):
    return '您的手機號碼為:%s' % my_tel


if __name__ == '__main__':
    app.run(debug=True)
需求二:解析或反轉URL
from flask import Flask,url_for
from werkzeug.routing import BaseConverter

app = Flask(__name__)

class ListConverter(BaseConverter):
    def to_python(self, value):
        '''
        將url中的引數經過解析傳給檢視函式
        '''
        return value.split('+')

    def to_url(self, value):
        '''
        會將url反轉的url引數放到url中
        '''
        return '+'.join(value)

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

@app.route('/')
def hello_world():
    print(url_for('posts',boards=['a','b']))
    return 'Hello World!'

@app.route('/posts/<list:boards>/')
def posts(boards):
    return '您提交的板塊是:%s'% boards


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