flask路由和檢視
阿新 • • 發佈:2018-11-24
路由基本定義
指定路由地址:
-
指定訪問路徑為 demo1,http://127.0.0.1:5000/demo1
@app.route('/demo1') def index(): return 'demo1'
給路由傳參:
-
路由傳參,http://127.0.0.1:5000/user/abc
@app.route('/user/<user_id>') def user_info(user_id): return 'hello %s' % user_id
路由傳遞的引數預設當做 string 處理,也可以指定引數的型別
-
指定路由傳遞引數型別(int),
@app.route('/user/\<int:user_id\>') def user_info(user_id): return 'hello %d' % user_id
尖括號中的內容是動態的,在此暫時可以理解為接受 int 型別的值,實際上 int 代表使用 IntegerConverter 去處理 url 傳入的引數。
指定請求方式:
預設請求方式:GET OPTIONS(自帶) HEAD(自帶)
@app.route('/demo2', methods=['GET', 'POST']) def demo2(): # 直接從請求中取到請求方式並返回 return request.method
檢視常用邏輯
return返回JSON
給客戶端返回JSON資料,直接使用jsonify生成一個JSON的響應
\# 返回JSON 型別資料
@app.route('/demo4')
def demo4():
json_dict = {
"user_id": 10,
"user_name": "laowang"
}
return jsonify(json_dict)
不推薦使用 json.dumps 轉成 JSON 字串直接返回,因為返回的資料要符合 HTTP 協議,如果是 JSON 需要指定 content-type:application/json
return重定向:
- 1 redirect
@app.route('/demo5')
def demo5():
return redirect('http://www.baidu.com')
- 2 url_for
\#demo1路徑必須存在
@app.route('/demo5')
def demo5():
return redirect(url_for('demo1'))
- 3 url_for帶引數,(’檢視函式‘,形參=值)
@app.route('/demo5')
def demo5():
# 使用 url_for 生成指定檢視函式所對應的 url
return redirect(url_for('user_info', user_id=100))
自定義狀態碼:
可以實現自定義狀態碼:status code: 666
@app.route('/demo6')
def demo6():
return '狀態碼為 666', 666
正則匹配路由:
正則匹配路由,限制使用者訪問的引數。
具體實現步驟為:
- 匯入轉換器基類:在 Flask 中,所有的路由的匹配規則都是使用轉換器物件進行記錄
- 自定義轉換器:自定義類繼承於轉換器基類
- 新增轉換器到預設的轉換器字典中
- 使用自定義轉換器實現自定義匹配規則
程式碼實現
- 1 匯入轉換器基類
from werkzeug.routing import BaseConverter
- 2.1 自定義轉換器
\# 自定義正則轉換器
class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
# 將接受的第1個引數當作匹配規則進行儲存
self.regex = args[0]
- 2.2 將自定義轉換器新增到轉換器字典中,並指定轉換器使用時名字為: re
app = Flask(__name__)
app.url_map.converters['re'] = RegexConverter
- 3 自定義匹配規則(當前此處定義的規則是:3位數字)
@app.route('/user/\<re("[0-9]{3}"):user_id\>')
def user_info(user_id):
return "user_id 為 %s" % user_id
執行測試:http://127.0.0.1:5000/user/123 ,如果訪問的url不符合規則,會提示找不到頁面
系統自帶轉換器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter, 注意預設和字串都是UnicodeConverter
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter, }
系統自帶的轉換器具體使用方式在每種轉換器的註釋程式碼中有寫,請留意每種轉換器初始化的引數。
PostMan測試工具:
PostMan 模擬網頁 HTTP 請求的 Chrome 外掛,可以對路由和檢視函式進行除錯,基本操作就是會使用它。