flask之Flask、config配置
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'