国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Flask框架實現給視圖函數增加裝飾器操作示例

2020-02-15 22:24:45
字體:
來源:轉載
供稿:網友

本文實例講述了Flask框架實現給視圖函數增加裝飾器操作。分享給大家供大家參考,具體如下:

@app.route的情況下增加裝飾器的寫法:

from flask import Flask,request,render_template,redirect,session,url_for,viewsfrom flask import render_templateapp = Flask(__name__) #實例化flask對象app.debug = True  #能夠隨時更改自動重啟,不加的話每次更改代碼需要手動重啟app.config['SECRET_KEY'] = '123456'  #secret_key,用于給session加密@app.route('/login',methods=['GET','POST'],endpoint='t1') #endpoint是url的別名,相當于django中Url的namedef login():  if request.method == "GET":    # res = request.query_string    # print(res) 獲取通過GET請求url傳過來的參數    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  #設置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')@wapperdef detail(nid):  print(nid)  return render_template('hello.html')'''如果給一個視圖函數增加裝飾器,應該加在app.route下面,這樣的效果就是,裝飾器將下面的所有內容包裹,然后路由對應到這大的包裹中來。需要注意endpoint要注明,如果不注明endpoint則默認用函數名來定義,此時所有的函數名都叫inner了,所以需要注明endpoint,只是為了區分。'''if __name__ == '__main__':  app.run()

另一種寫法:

import functoolsdef wapper(func):  @functools.wraps(func)  def inner(*args,**kwargs):    return func(*args,**kwargs)  return inner'''functools.wraps()相當于保留元信息說白了就是,如果不加這個裝飾器,那么你打印detail的__name__它就是inner了,因為加了裝飾器,效果等同于inner=inner(detail()),如果在裝飾器中加了functools這個裝飾器,那么相當于給__name__重新賦值,inner.__name__ = func.__name_-其函數的名字得以保留。'''@wapperdef detail():  passprint(detail.__name__)

flask的get_flashed_messages,flash

from flask import Flask,get_flashed_messages,flashapp = 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')  '''  閃現效果,相當于set視圖函數執行2次,會在一個列表中存儲兩個flash函數的內容,  當執行get_flashed_messages的時候則會取出該列表,并清空,類似字典的Pop。  具體用處不大。。。  '''  return 'Hello world'if __name__ == '__main__':  app.run()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉木萨尔县| 阳朔县| 梁山县| 察隅县| 泸西县| 苏州市| 旬阳县| 虎林市| 商水县| 龙川县| 清水河县| 广水市| 贵港市| 南汇区| 师宗县| 德化县| 平凉市| 万安县| 磐石市| 怀化市| 梁平县| 湄潭县| 眉山市| 苍梧县| 昌宁县| 安丘市| 富锦市| 嘉义市| 扶绥县| 普定县| 余庆县| 瑞金市| 扶余县| 章丘市| 左贡县| 勃利县| 体育| 高阳县| 巴彦淖尔市| 繁昌县| 普兰店市|