Flask框架實現(xiàn)給視圖函數(shù)增加裝飾器操作示例
本文實例講述了Flask框架實現(xiàn)給視圖函數(shù)增加裝飾器操作。分享給大家供大家參考,具體如下:
在@app.route
的情況下增加裝飾器的寫法:
from flask import Flask,request,render_template,redirect,session,url_for,views from flask import render_template app = Flask(__name__) #實例化flask對象 app.debug = True #能夠隨時更改自動重啟,不加的話每次更改代碼需要手動重啟 app.config['SECRET_KEY'] = '123456' #secret_key,用于給session加密 @app.route('/login',methods=['GET','POST'],endpoint='t1') #endpoint是url的別名,相當(dāng)于django中Url的name def login(): if request.method == "GET": # res = request.query_string # print(res) 獲取通過GET請求url傳過來的參數(shù) return render_template('login.html') else: user = request.form.get('user') pwd = request.form.get('pwd') if user == 'tom' and pwd == '123': session['userinfo'] = user #設(shè)置session return render_template('hello.html') return render_template('login.html', error='用戶名或密碼錯誤') def wapper(func): def inner(*args,**kwargs): user = session.get('user_info') if not user: return redirect('/login') return func(*args,**kwargs) return inner @app.route('/detail/<int:nid>',methods=['GET'],endpoint='n1') @wapper def detail(nid): print(nid) return render_template('hello.html') ''' 如果給一個視圖函數(shù)增加裝飾器,應(yīng)該加在app.route下面,這樣的效果就是, 裝飾器將下面的所有內(nèi)容包裹,然后路由對應(yīng)到這大的包裹中來。 需要注意endpoint要注明,如果不注明endpoint則默認用函數(shù)名來定義, 此時所有的函數(shù)名都叫inner了,所以需要注明endpoint,只是為了區(qū)分。 ''' if __name__ == '__main__': app.run()
另一種寫法:
import functools def wapper(func): @functools.wraps(func) def inner(*args,**kwargs): return func(*args,**kwargs) return inner ''' functools.wraps()相當(dāng)于保留元信息 說白了就是,如果不加這個裝飾器,那么你打印detail的__name__它就是inner了, 因為加了裝飾器,效果等同于inner=inner(detail()), 如果在裝飾器中加了functools這個裝飾器,那么相當(dāng)于給__name__重新賦值,inner.__name__ = func.__name_- 其函數(shù)的名字得以保留。 ''' @wapper def detail(): pass print(detail.__name__)
flask的get_flashed_messages,flash
from flask import Flask,get_flashed_messages,flash app = Flask(__name__) app.secret_key = 'asdf' @app.route('/get') def get(): data = get_flashed_messages() print(data) return 'Hello world' @app.route('/set') def set(): flash('info info') ''' 閃現(xiàn)效果,相當(dāng)于set視圖函數(shù)執(zhí)行2次,會在一個列表中存儲兩個flash函數(shù)的內(nèi)容, 當(dāng)執(zhí)行g(shù)et_flashed_messages的時候則會取出該列表,并清空,類似字典的Pop。 具體用處不大。。。 ''' return 'Hello world' if __name__ == '__main__': app.run()
flash還可以通過category參數(shù)給Flash內(nèi)容歸類,通過不同類別取不同內(nèi)容。
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python入門與進階經(jīng)典教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
使用Python自動化Microsoft Excel和Word的操作方法
這篇文章主要介紹了使用Python自動化Microsoft Excel和Word,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04YOLOv5中SPP/SPPF結(jié)構(gòu)源碼詳析(內(nèi)含注釋分析)
其實關(guān)于YOLOv5的網(wǎng)絡(luò)結(jié)構(gòu)其實網(wǎng)上相關(guān)的講解已經(jīng)有很多了,但是覺著還是有必要再給大家介紹下,下面這篇文章主要給大家介紹了關(guān)于YOLOv5中SPP/SPPF結(jié)構(gòu)源碼的相關(guān)資料,需要的朋友可以參考下2022-05-05python中hasattr()、getattr()、setattr()函數(shù)的使用
這篇文章主要介紹了python中hasattr()、getattr()、setattr()函數(shù)的使用方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08