日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flask(二)

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flask(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.裝飾器坑

使用裝飾器后,視圖函數名字相同問題view function錯誤問題1.給裝飾器加functiontools2.反向生成url地址標志,指定endpoint(endpoint必須唯一)

?

from flask import Flask,session,request,redirect,render_template app = Flask(__name__) app.secret_key = 'lilz' ? def outer(func):def inner():print('success')func()# return 'ok'return inner ? @app.route('/') @outer def index():if not session.get('user'):return redirect('/login')return render_template('index.html') ? ? @app.route('/login',methods=['GET','POST']) @outer def login():if request.method == 'POST':if request.form.get('username') == 'lilz' and request.form.get('password'):session['user'] = request.form.get('username')+'666'return redirect('/')else:return render_template('login.html') ? ? app.run(debug=True)

?

啟動程序會報錯

原因

   @outer 裝飾器返回的是inner,所以兩個加了 @outer裝飾器的函數都是inner,就會報錯

?

解決方案:

方式一:functools

import functools from flask import Flask,session,request,redirect,render_template app = Flask(__name__) app.secret_key = 'lilz' ? #-------自定義裝飾器--------------------------------- def outer(func):@functools.wraps(func)def inner():print('success')func()# return 'ok'return inner ? @app.route('/') @outer def index():if not session.get('user'):return redirect('/login')return render_template('index.html') ? ? @app.route('/login',methods=['GET','POST']) @outer def login():if request.method == 'POST':if request.form.get('username') == 'lilz' and request.form.get('password'):session['user'] = request.form.get('username')+'666'return redirect('/')else:return render_template('login.html') ? app.run(debug=True)

?

`functools.wraps 則可以將原函數對象的指定屬性復制給包裝函數對象, 默認有 __module____name____doc__`

?

方式二:endpoint

反向生成url地址標志 默認視圖函數名

from flask import Flask,session,request,redirect,render_template,url_for app = Flask(__name__) app.secret_key = 'lilz' ? ? def outer(func):def inner():print('success')func()return 'ok'return inner ? ? ? @app.route('/', endpoint="index") @outer def index():if not session.get('user'):return redirect('/login')return render_template('index.html') ? ? @app.route('/login',methods=['GET','POST'],endpoint="login") @outer def login():return 'enen' ? app.run(debug=True)

?

2.flask中的路由

@app.route("/") 1.methods=["GET","POST"] :只有列表中的訪問方式才可以執行該視圖函數 2.endpoint="index" :反向url地址,默認為視圖函數名 3.defaults={"nid"="123"} :默認參數 4.strict_slashes=True(Flase) :是否嚴格遵循路由地址規則,后面可不可以加/ 5.redirect_to="/index" :永久重定向(通常用于網站永久更改地址) 6.int與string:如下圖,動態路由參數(視圖函數中要接受page)float:@app.route("/index/<float:post_id>) path:@app.route("/index/<path:path>)

?

3.flask實例化配置

app=Flask(__name__) ? 1.app=Flask(__name__,template_folder="temp")#指定模板路徑 2.app=Flask(__name__,static_folder="statics")#靜態文件目錄 app=Flask(__name__,static_url_path="/static")#遇到/static時,找static_folder,靜態目錄和靜態文件路徑地址的區別 static_url_path默認是static_folder前加一個/ ######################################3 4.static_host=None #指定靜態文件服務器地址 5.host_matching = False, # 如果不是特別需要的話,慎用,否則所有的route 都需要host=""的參數,必須得有SERVER_NANME才有用 6.instance_path = None, # 指向另一個Flask實例的路徑 7.instance_relative_config = False # 是否加載另一個實例的配置 8.root_path = None # 主模塊所在的目錄的絕對路徑,默認項目目錄

?

4.flask對象配置

app.secret_key="shy" app.config["SECRET_KEY"]="shy" #也可以這樣配置SECRET_KEY

?

{'DEBUG': False, # 是否開啟Debug模式,'TESTING': False, # 是否開啟測試模式 區別:DEBUG可以重啟,TESTING不可以重啟,TESTING在控制臺中可以看到所有的信息'PROPAGATE_EXCEPTIONS': None, # 是否開啟異常傳播(是否在控制臺打印LOG) 當Debug或者testing開啟后,自動為True'PRESERVE_CONTEXT_ON_EXCEPTION': None, # 一兩句話說不清楚,一般不用它'SECRET_KEY': None, # 之前遇到過,在啟用flask內置Session(或開啟閃現時)的時候,一定要有它'PERMANENT_SESSION_LIFETIME': 31, # days , Session的生命周期(天)默認31天'USE_X_SENDFILE': False, # 是否棄用 x_sendfile'LOGGER_NAME': None, # 日志記錄器的名稱'LOGGER_HANDLER_POLICY': 'always','SERVER_NAME': None, # 服務訪問域名'APPLICATION_ROOT': None, # 項目的完整路徑 !!!!!!!!!!'SESSION_COOKIE_NAME': 'session', # 在cookies中存放session加密字符串的名字'SESSION_COOKIE_DOMAIN': None, # 在哪個域名下會產生session記錄在cookies中'SESSION_COOKIE_PATH': None, # cookies的路徑'SESSION_COOKIE_HTTPONLY': True, # 控制 cookie 是否應被設置 httponly 的標志,'SESSION_COOKIE_SECURE': False, # 控制 cookie 是否應被設置安全標志'SESSION_REFRESH_EACH_REQUEST': True, # 這個標志控制永久會話如何刷新'MAX_CONTENT_LENGTH': None, # 如果設置為字節數, Flask 會拒絕內容長度大于此值的請求進入,并返回一個 413 狀態碼'SEND_FILE_MAX_AGE_DEFAULT': 12, # hours 默認緩存控制的最大期限'TRAP_BAD_REQUEST_ERRORS': False,# 如果這個值被設置為 True ,Flask不會執行 HTTP 異常的錯誤處理,而是像對待其它異常一樣,# 通過異常棧讓它冒泡地拋出。這對于需要找出 HTTP 異常源頭的可怕調試情形是有用的。'TRAP_HTTP_EXCEPTIONS': False,# Werkzeug 處理請求中的特定數據的內部數據結構會拋出同樣也是“錯誤的請求”異常的特殊的 key errors 。# 同樣地,為了保持一致,許多操作可以顯式地拋出 BadRequest 異常。# 因為在調試中,你希望準確地找出異常的原因,這個設置用于在這些情形下調試。# 如果這個值被設置為 True ,你只會得到常規的回溯。'EXPLAIN_TEMPLATE_LOADING': False,'PREFERRED_URL_SCHEME': 'http', # 生成URL的時候如果沒有可用的 URL 模式話將使用這個值'JSON_AS_ASCII': True,# 默認情況下 Flask 使用 ascii 編碼來序列化對象。如果這個值被設置為 False ,# Flask不會將其編碼為 ASCII,并且按原樣輸出,返回它的 unicode 字符串。# 比如 jsonfiy 會自動地采用 utf-8 來編碼它然后才進行傳輸。'JSON_SORT_KEYS': True,#默認情況下 Flask 按照 JSON 對象的鍵的順序來序來序列化它。# 這樣做是為了確保鍵的順序不會受到字典的哈希種子的影響,從而返回的值每次都是一致的,不會造成無用的額外 HTTP 緩存。# 你可以通過修改這個配置的值來覆蓋默認的操作。但這是不被推薦的做法因為這個默認的行為可能會給你在性能的代價上帶來改善。'JSONIFY_PRETTYPRINT_REGULAR': True,'JSONIFY_MIMETYPE': 'application/json',#根據jsonify來更改響應頭中的contentType'TEMPLATES_AUTO_RELOAD': None, }

?

有意義

?

三種模式下切換太麻煩,用一個類(對象)來控制

class FlaskDebug(object):DEBUG=TrueSECRET_KEY="DEBUGmoshidesecret_key"PERMANENT_SESSION_LIFETIME = 7SESSION_COOKIE_NAME = "debug_session" ? class FlaskTesting(object):TESTING=TrueSECRET_KEY="TESTINGmoshidesecret_key"PERMANENT_SESSION_LIFETIME = 15SESSION_COOKIE_NAME = "TESTING_session"

?

5.flask藍圖(blueprint)相當于一個可插拔的app

編寫

?

導入

?

訪問:192.168.177.130:5000/app01

url前綴

?

注冊時加url前綴也行

如果兩個不一樣,以注冊為準

?

6.flask中的flash(閃現)

存進去,取出來就消失了

存與取

?

只執行一次get_dlashed_messages里面所有的東西都沒了

?

7.特殊裝飾器(s4)

1.@app.before_request:類似于中間件

請求進入視圖函數之前執行

先登錄才能進入視圖函數

?

可以有多個before_request

?

2.@app.after_request:在相應客戶端之前

?

兩者的執行順序

?

?

3.@app.errorhandler(404) #重定義錯誤頁面返回信息

出現錯誤時換個頁面,自動播放歌曲

@app.errorhandler(404) def error404(args):print(args)return render_template("error.html")

?

<!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body><h1>您訪問的頁面出現了異常</h1><audio src="/static/goout.mp3" autoplay></audio> </body> </html>

?

?

?

轉載于:https://www.cnblogs.com/shanghongyun/p/10228779.html

總結

以上是生活随笔為你收集整理的flask(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。