Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
flask 是轻量级的,并且可扩展性强,可定制性强 的框架。适用于开发小型的网站。开发大型的网站也行,因为flask提供了很多第三方的组件,我们把flask与第三方的组件结合起来,也可以搭建一个与Django类似的,集成了很多功能的一个框架。
from flask import Flask
app = Flask(__name__)
@app.route(‘/index‘)
def index():
return ‘index‘
if __name__ == ‘__main__‘:
app.run()
二、配置文件
flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:
{
‘DEBUG‘: get_debug_flag(default=False), 是否开启Debug模式
‘TESTING‘: False, 是否开启测试模式
‘PROPAGATE_EXCEPTIONS‘: None,
‘PRESERVE_CONTEXT_ON_EXCEPTION‘: None,
‘SECRET_KEY‘: None,
‘PERMANENT_SESSION_LIFETIME‘: timedelta(days=31),
‘USE_X_SENDFILE‘: False,
‘LOGGER_NAME‘: None,
‘LOGGER_HANDLER_POLICY‘: ‘always‘,
‘SERVER_NAME‘: None,
‘APPLICATION_ROOT‘: None,
‘SESSION_COOKIE_NAME‘: ‘session‘,
‘SESSION_COOKIE_DOMAIN‘: None,
‘SESSION_COOKIE_PATH‘: None,
‘SESSION_COOKIE_HTTPONLY‘: True,
‘SESSION_COOKIE_SECURE‘: False,
‘SESSION_REFRESH_EACH_REQUEST‘: True,
‘MAX_CONTENT_LENGTH‘: None,
‘SEND_FILE_MAX_AGE_DEFAULT‘: timedelta(hours=12),
‘TRAP_BAD_REQUEST_ERRORS‘: False,
‘TRAP_HTTP_EXCEPTIONS‘: False,
‘EXPLAIN_TEMPLATE_LOADING‘: False,
‘PREFERRED_URL_SCHEME‘: ‘http‘,
‘JSON_AS_ASCII‘: True,
‘JSON_SORT_KEYS‘: True,
‘JSONIFY_PRETTYPRINT_REGULAR‘: True,
‘JSONIFY_MIMETYPE‘: ‘application/json‘,
‘TEMPLATES_AUTO_RELOAD‘: None,
}
修改配置文件的方式:
方式一:
app.config[‘DEBUG‘] = True
PS: 由于Config对象本质上是字典,所以还可以使用app.config.update(...)
方式二:
app.config.from_object("python类或类的路径")
# 按照不同的情况 ;修改配置 app.config.from_object(‘settings.DevelopmentConfig‘) #settings.py文件 #基础的配置类 class Config(object): DEBUG = False TESTING = False DATABASE_URI = ‘sqlite://:memory:‘ #用于上线的配置类 class ProductionConfig(Config): DATABASE_URI = ‘mysql://user@localhost/foo‘ #用于开发的配置类 class DevelopmentConfig(Config): DEBUG = True
PS: settings.py文件默认路径要放在程序root_path目录,如果instance_relative_config为True,则就是instance_path目录
写一个配置文件的字符串怎么找到配置信息的原理
# ‘settings.DevelopmentConfig‘通过切割,在importlib 加载模块,然后反射得到这个类的对象。dir(obj) 拿到这个类下面的所有属性和方法 # 再判断是大写的,这样就可以拿到这个配置下面的配置信息了。
原理的代码
import importlib path = "settings.Foo" p,c = path.rsplit(‘.‘,maxsplit=1) m = importlib.import_module(p) cls = getattr(m,c) # 如果找到这个类? #dir(cls)找到这个类下面的所有属性的字符串,不包含__init__下面的对象属性 for key in dir(cls): if key.isupper(): print(key,getattr(cls,key)) #类.字符串
原文:https://www.cnblogs.com/zenghui-python/p/11668634.html