flask_config.py
1 ''' 2 flask的配置: 3 1.flask項目初始化配置: 4 (1)app=Flask(__name__)#初始化聲明falsk項目為當前py文件,app應用變量名可以更改 5 (2)Flask()參數配置: 6 ①template_folder=''指定靜態模板文件頁面所在文件目錄,不指定默認為templates目錄 7 ②static_folder=''指定靜態文件所在的文件目錄如staticfiles,不指定默認為static目錄 8 在默認靜態文件目錄中,模板頁面中的請求路徑直接寫相對路徑,例如:src="/static/1.png"即可直接請求返回 9 在更換了自定義靜態文件目錄時,以下兩種方式可以解決靜態文件返回問題: 10 a.增加參數配置static_url_path='/static',相當於是請求路徑src="/static/1.png"不變,將請求路徑/static映射到自定義的靜態文件目錄staticfiles 11 b.直接修改模板文件中的路徑,例如將src="/static/1.png"改為src="/staticfiles/1.png"(不推薦使用) 12 13 14 2.app.config[]的項目實例配置: 15 (1)常用配置: 16 "DEBUG": None, #debug模式的設置,開發環境用 17 "TESTING": False, #測試模式的設置,無限接近線上環境 18 "SECRET_KEY": None, #session秘鑰配置 19 "PERMANENT_SESSION_LIFETIME": timedelta(days=31), #session有效期時間的設置 20 "SESSION_COOKIE_NAME": "session", #cookies中存儲的session字符串的鍵 21 "JSONIFY_MIMETYPE": "application/json", #設置jsonify響應時返回的contentype類型 22 (2)app.config.from_object(self,object)實例化對象進行配置 23 以DEBUG和TESTING模式設置切換為例: 24 ①自定義一個模塊如settings.py 25 ②創建兩種模式的不同類,配置相應屬性參數 26 ③導入settings.py中的模式類,通過app.config.from_object(self,object)進行配置 27 ''' 28 29 30 from flask import Flask, render_template 31 32 33 #1.flask項目初始化配置 34 #templates是flask默認的模板文件目錄,static是falsk默認的靜態文件路徑,只需要配置即可 35 # ①template_folder=''指定靜態模板文件頁面所在文件目錄,不指定默認為templates目錄 36 # ②static_folder=''與static_url_path='、static'的配合使用 37 app=Flask(__name__,template_folder='html',static_folder='staticfiles',static_url_path='/static') 38 39 @app.route('/index') 40 def index(): 41 return render_template('index0.html') 42 43 44 #2.app.config[]的項目實例配置:源碼中default_config字典 45 ''' 46 default_config = ImmutableDict( 47 { 48 "ENV": None, #虛擬環境,當前項目運行環境 49 "DEBUG": None, #debug模式的設置,開發環境用,自動重啟項目,日志級別低,報錯在前端顯示具體代碼 50 "TESTING": False, #測試模式的設置,無限接近線上環境,不會重啟項目,日志級別較高,不會在前端顯示錯誤代碼 51 "PROPAGATE_EXCEPTIONS": None, 52 "PRESERVE_CONTEXT_ON_EXCEPTION": None, 53 "SECRET_KEY": None, #session秘鑰配置 54 "PERMANENT_SESSION_LIFETIME": timedelta(days=31), #session有效期時間的設置 55 "USE_X_SENDFILE": False, 56 "SERVER_NAME": None, #主機名設置 57 "APPLICATION_ROOT": "/", #應用根目錄配置 58 "SESSION_COOKIE_NAME": "session", #cookies中存儲的session字符串的鍵 59 "SESSION_COOKIE_DOMAIN": None, #session作用域 60 "SESSION_COOKIE_PATH": None, #session作用的請求路徑 61 "SESSION_COOKIE_HTTPONLY": True, #session是否只支持http請求方式 62 "SESSION_COOKIE_SECURE": False, #session安全配置 63 "SESSION_COOKIE_SAMESITE": None, 64 "SESSION_REFRESH_EACH_REQUEST": True, 65 "MAX_CONTENT_LENGTH": None, 66 "SEND_FILE_MAX_AGE_DEFAULT": timedelta(hours=12), 67 "TRAP_BAD_REQUEST_ERRORS": None, 68 "TRAP_HTTP_EXCEPTIONS": False, 69 "EXPLAIN_TEMPLATE_LOADING": False, 70 "PREFERRED_URL_SCHEME": "http", 71 "JSON_AS_ASCII": True, 72 "JSON_SORT_KEYS": True, 73 "JSONIFY_PRETTYPRINT_REGULAR": False, 74 "JSONIFY_MIMETYPE": "application/json", #設置jsonify響應時返回的contentype類型 75 "TEMPLATES_AUTO_RELOAD": None, 76 "MAX_COOKIE_SIZE": 4093, 77 } 78 ) 79 ''' 80 81 82 #(1)一般開發寫測試需要經常切換debug和測試模式 83 # app.config['DEBUG']=True #debug模式,日志級別低,一般在開發環境用,報錯直接回在前端頁面顯示,具體到代碼 84 # app.config['TESTING']=True #測試模式,日志級別較高,無限接近線上環境,報錯只在后端顯示具體錯誤,前端頁面之后提示有錯,不會具體顯示 85 86 87 @app.route('/test') 88 def test(): 89 print(int('sdf'))#此行代碼運行會報錯,開啟DEBUG模式,直接在前端頁面顯示錯誤代碼,而在TESTING模式下前端頁面之會提示錯誤,並不會有具體代碼 90 return '直接通過app.config[]對DEBUG或TESTING模式進行設置!' 91 92 93 #(2)通過自定義模塊類來實現debug和測試模式的配置切換(自定義模式切換模塊seetings.py) 94 from settings import DebugMode 95 from settings import TestingMode 96 #使用app.config.from_object(self,object)進行DEBUG或TESTING模式的設置 97 # app.config.from_object(DebugMode) #開啟DEBUG模式,直接在前端頁面顯示錯誤代碼 98 app.config.from_object(TestingMode) #而在TESTING模式下前端頁面之會提示錯誤,並不會有具體代碼 99 100 @app.route('/two_modes') 101 def mode(): 102 print(int('sdf11'))#此行代碼運行會報錯 103 return '通過app.config.from_object(self,object)進行DEBUG或TESTING模式的設置!' 104 105 106 107 if __name__ == '__main__': 108 app.run()
index0.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>index</title> 6 </head> 7 <body> 8 <h2>項目中指定模板文件目錄html中的index頁面,默認不指定為templates模板目錄</h2> 9 10 11 <div><h2>項目中指定靜態文件目錄staticfiles返回當前圖片,默認不指定為static靜態文件目錄</h2> 12 <img src="/static/1.png" alt=""></div> 13 </body> 14 </html>
seetings.py
1 class DebugMode(object): 2 DEBUG=True 3 SECRET_KEY='SGHJK34H5JKP5OJO6J@#$%^&' 4 SESSION_COOKIE_NAME='NOT SESSION' 5 6 class TestingMode(object): 7 TESTING=True 8 SECRET_KEY='#$%^&*(*&^%$%^&*(*&^&*()_)(*SGHJK34H5JKP5OJO6J@#$%^&' 9 SESSION_COOKIE_NAME='MD5_DATA'