相對於Django的URL路由設置來講,Flask配置的方式有較多的不一樣。 下面來根據幾個示例,來看看有什麼地方不一樣。flask
示例以下:瀏覽器
Flask的路由能夠經過視圖函數的修飾器@app.route()
來配置訪問url。 在Django中能夠在urls.py
中查看全部視圖的url信息,那麼Flask如何查看全部視圖url的信息呢?bash
能夠看到日誌中打印出了url的信息。app
在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"
複製代碼
相似於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
的視圖函數中。