亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我覺得flask絕對沒有這么低級,肯定有支持的方法,所以來向各路長老求個方子

我覺得flask絕對沒有這么低級,肯定有支持的方法,所以來向各路長老求個方子

皈依舞 2023-04-14 18:14:48
flask跟web.py差別挺大的,尤其是在路由管理這塊。web.py把所有的路由都集中在一起,我比較喜歡這種方式。最近用flask,發現@app.route('<URL>')中URL只支持string、int、float、path 4種類型,并不支持正則。
查看完整描述

2 回答

?
當年話下

TA貢獻1890條經驗 獲得超9個贊

通過運行如下代碼:

from flask import Flaskfrom pprint import pprintif __name__ == '__main__':
    app = Flask(__name__)
    pprint(app.url_map.converters)

可以獲取Flask默認支持的轉換器:

{'any': <class 'werkzeug.routing.AnyConverter'>, 'default': <class 'werkzeug.routing.UnicodeConverter'>, 'float': <class 'werkzeug.routing.FloatConverter'>, 'int': <class 'werkzeug.routing.IntegerConverter'>, 'path': <class 'werkzeug.routing.PathConverter'>, 'string': <class 'werkzeug.routing.UnicodeConverter'>}

那如何創建一個新的路由解析轉化器呢?
在Flask的app.py里有個簡單的例子,這個例子是創建了一個list類型的路由轉換器:

from werkzeug.routing import BaseConverter           
                                                     
class ListConverter(BaseConverter):                  
    def to_python(self, value):                      
        return value.split(',')                      
    def to_url(self, values):                        
        return ','.join(BaseConverter.to_url(value)  
                        for value in values)         
                                                     
app = Flask(__name__)                                app.url_map.converters['list'] = ListConverter

那么我們可以容易創建一個正則解析器,因為之前的轉換器最終也是轉換成正則的,只需要將獲取的值設置為regex屬性就可以使用了:

from flask import Flaskfrom werkzeug.routing import BaseConverterclass RegexConverter(BaseConverter):    def __init__(self, map, *args):
        self.map = map
        self.regex = args[0]

app = Flask(__name__)
app.url_map.converters['regex'] = [email protected]('/view/<regex("[a-zA-Z0-9]+"):uuid>/')def view(uuid):    """
    url: /view/1010000000125259/
    result: view uuid:1010000000125259
    """
    return "view uuid: %s" % (uuid)@app.route('/<regex(".*"):url>')def not_found(url):    """
    url: /hello
    result: not found: 'hello'
    """
    return "not found: '%s'" % (url)


查看完整回答
反對 回復 2023-04-17
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

插一句,flask也可以集中到一起。

python的裝飾器其實就是返回函數的函數,外層函數的參數就是裝飾器的參數,內層函數的參數是被裝飾的函數。所以直接調用app.route應該會返回一個函數,直接把req handler傳進去就可以注冊它。

于是,你可以這樣寫:

app.route(pattern)(handler)

就能集中到一起了。


查看完整回答
反對 回復 2023-04-17
  • 2 回答
  • 0 關注
  • 205 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號