Flask 視圖函數的URL路由設置說明

相對於Django的URL路由設置來講,Flask配置的方式有較多的不一樣。 下面來根據幾個示例,來看看有什麼地方不一樣。flask

示例以下:瀏覽器

  • app.url_map 查看全部路由
  • 使用methods設置視圖GET、POST請求的方式
  • 同一路由裝飾多個視圖函數
  • 同一視圖多個路由裝飾器
  • 使用 url_for 進行url反向解析

app.url_map 查看全部路由

Flask的路由能夠經過視圖函數的修飾器@app.route()來配置訪問url。 在Django中能夠在urls.py中查看全部視圖的url信息,那麼Flask如何查看全部視圖url的信息呢?bash

能夠看到日誌中打印出了url的信息。app

使用methods設置視圖GET、POST請求的方式

在Flask的視圖配置了url以後,默認是隻支持GET請求的。若是須要處理POST請求,則須要使用methods參數設置一下。函數

# 經過methods設置GET\POST請求
@app.route('/post_only', methods=["POST"])
def post_only():
    return "post only page"
複製代碼

在瀏覽器訪問: http://127.0.0.1:5000/post_onlypost

能夠看到不容許GET請求。那麼下面來給這個視圖再設置容許GET請求。測試

# 經過methods設置GET\POST請求
@app.route('/post_only', methods=["GET","POST"])
def post_only():
    return "post only page"
複製代碼

再次訪問 http://127.0.0.1:5000/post_onlyui

能夠看到GET請求可否正常訪問了。url

同一路由裝飾多個視圖函數

在同一個url路由的請求下,能夠會有GET\POST\DELETE\PUT等多個不一樣的業務處理。 那麼就須要使用不一樣的視圖函數來區分處理。spa

@app.route('/hello', methods=["GET"])
def hello_get():
    return "hello_get"

@app.route('/hello', methods=["POST"])
def hello_post():
    return "hello_post"
複製代碼

從結果來看,同一個url下,根據配置不一樣的method,則能夠設置到不一樣的視圖函數進行業務處理。

同一視圖多個路由裝飾器

一個視圖如何定義多個url進行訪問? 在Django中只要在urls.py中設置多行url定義便可,而在Flask中只須要使用多個路由修飾器進行定義。

# 一個視圖設置多個URL
@app.route('/diff_url1')
@app.route('/diff_url2')
def diff_url():
    return "diff url"
複製代碼

使用 url_for 進行反解析

相似於Django在設置轉發url的時候不會直接去寫死路徑,而是使用url設置的name值來進行url反向解析。 在Flask中則能夠使用url_for來進行反向解析,而Flask的視圖函數不須要設置name,而是直接使用視圖函數的函數名便可。

from flask import  redirect, url_for

@app.route('/hello', methods=["GET"])
def hello_get():
    return "hello_get"

# 使用url_for進行反向解析
@app.route('/url_for_test')
def url_for_test():
    return redirect(url_for('hello_get'))
複製代碼

測試訪問 http://127.0.0.1:5000/url_for_test

能夠看到頁面自動跳轉至 hello_get 的視圖函數中。

相關文章
相關標籤/搜索