基本路線

可以使用 Flask 應用程式例項的 route 裝飾器定義 Flask 中的路徑:

app = Flask(__name__)

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

route 裝飾器接受一個匹配的 URL 字串。當應用程式收到對與此字串匹配的 URL 的請求時,將呼叫已修飾的函式(也稱為檢視函式 )。所以對於一條約路線,我們會:

@app.route('/about')
def about():
    return 'About page'

重要的是要注意這些路由不是像 Django 那樣的正規表示式。

你還可以定義變數規則以將 URL 段值提取到變數中:

@app.route('/blog/posts/<post_id>')
def get_blog_post(post_id):
    # look up the blog post with id post_id
    # return some kind of HTML

這裡變數規則位於 URL 的最後一段。無論 URL 的最後一段中的值是什麼,都將作為 post_id 引數傳遞給檢視函式(get_blog_post)。因此,對/blog/posts/42 的請求將檢索(或嘗試檢索)id 為 42 的部落格帖子。

重用 URL 也很常見。例如,我們可能希望/blog/posts 返回所有部落格帖子的列表。所以我們可以有兩個相同檢視函式的路由:

@app.route('/blog/posts')
@app.route('/blog/posts/<post_id>')
def get_blog_post(post_id=None):
    # get the post or list of posts

請注意,我們還必須為 get_blog_post 中的 post_id 提供 None 的預設值。匹配第一個路徑時,沒有值傳遞給檢視功能。

另請注意,預設情況下,變數規則的型別是字串。但是,你可以通過為變數新增字首來指定幾種不同的型別,例如 intfloat

@app.route('/blog/post/<int:post_id>')

Flask 的內建 URL 轉換器是:

string | Accepts any text without a slash (the default).
int    | Accepts integers.
float  | Like int but for floating point values.
path   | Like string but accepts slashes.
any    | Matches one of the items provided
uuid   | Accepts UUID strings

如果我們嘗試訪問 URL /blog/post/foo,並且最後一個 URL 段中的值無法轉換為整數,則應用程式將返回 404 錯誤。這是正確的操作,因為沒有/blog/post 規則和最後一個段中的字串。

最後,路由也可以配置為接受 HTTP 方法。route 裝飾器採用 methods 關鍵字引數,該引數是表示此路由的可接受 HTTP 方法的字串列表。正如你可能假設的那樣,預設值僅為 GET。如果我們有一個表單來新增新的部落格帖子並想要返回 GET 請求的 HTML 並解析 POST 請求的表單資料,那麼該路由將如下所示:

@app.route('/blog/new', methods=['GET', 'POST'])
def new_post():
    if request.method == 'GET':
        # return the form
    elif request.method == 'POST':
        # get the data from the form values

request 位於 flask 包中。請注意,在使用 methods 關鍵字引數時,我們必須明確要接受的 HTTP 方法。如果我們只列出了 POST,那麼該路由將不再響應 GET 請求並返回 405 錯誤。