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'

 

posted @ 2019-07-11 21:18  笑得好美  阅读(8002)  评论(1编辑  收藏  举报