Flask動態路由

二十一發表於2019-02-16

在通常我們寫路由的時候都是這樣子的:

@app.route("/")
def hello():
    return "Hello World"

但是我們會有這樣的需求,判斷字串的型別或長度來決定使用哪個檢視函式或者返回404,那我們就可以這樣做:

@app.route("/int:requirt>")
def fn_int(requirt):
    return "<h1>"+str(requirt)+"</h1>"
    
#http://127.0.0.1:5000/123    返回"<h1>123</h1>"
#http://127.0.0.1:5000/12    發生404錯誤

@app.route("/<float:requirt>")
def fn_float(requirt):
    return "<h1>"+str(requirt)+"</h1>"
    
#http://127.0.0.1:5000/1.2    返回"<h1>1.2</h1>"
#http://127.0.0.1:5000/12    發生404錯誤

@app.route_path("/<requirt>")
def fn(requirt):
    return "<h1>"+requirt+"</h1>"
    
#http://127.0.0.1:5000/1.2    返回"<h1>1.2</h1>"
#http://127.0.0.1:5000/12    返回<h1>12</h1>
#http://127.0.0.1:5000/hello    返回<h1>hello</h1>

上面寫了常用的三種動態路由限制型別,當然我們還可以自定義型別,繼承BaseConverter,然後就可以寫我們的規則了

from werkzeug.routing import BaseConverter

class MyConverter(BaseConverter):
    def __init__(self,map,regex):
        super().__init__(map)
        self.regex=regex
   
app.url_map.converters[`rule`]=MyConverter

@app.route_path("/<rule("w{3}"):requirt>")
def fn_rule(requirt):
    return "<h1>"+requirt+"</h1>"

#http://127.0.0.1:5000/hello    發生404
#http://127.0.0.1:5000/123    返回"<h1>123</h1>"
#http://127.0.0.1:5000/12.3    發生404

相關文章