1. 程式人生 > >flask路由和檢視

flask路由和檢視

路由基本定義

指定路由地址:

給路由傳參:

  • 路由傳參,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),

    http://127.0.0.1:5000/user/123

    @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

正則匹配路由:

正則匹配路由,限制使用者訪問的引數。

具體實現步驟為:

  1. 匯入轉換器基類:在 Flask 中,所有的路由的匹配規則都是使用轉換器物件進行記錄
  2. 自定義轉換器:自定義類繼承於轉換器基類
  3. 新增轉換器到預設的轉換器字典中
  4. 使用自定義轉換器實現自定義匹配規則

程式碼實現

  • 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 外掛,可以對路由和檢視函式進行除錯,基本操作就是會使用它。