flask配置config详解
flask系列讲座与2017年12月6日开始,每周一篇。第三篇其中讲述flask的配置方法。使用app.config.from_object()方法,似乎很神奇。如果明白背后逻辑,实际上很自然。涉及代码没有几行,背后逻辑涉及的代码也只有几行。
都说python简洁,这篇大概具有一定的典型性。简洁是指程序代码少,并不一定是含义少。
本文flask的配置文件涉及config的文件均放在microblog的文件夹中,共有两个模块:
子文件夹app中的__init__.py
config.py
文件结构如下:
microblog\ 项目文件夹
app\ 名为app的package
__init__.py 初始化模块,5行代码
......
config.py config模块,3行代码
microblog.py microblog模块,1行代码
此两个模块共8行代码,另外一个模块microblog.py中,只有一行代码,引用了app。本文涉及的代码共9行
__init__.py的代码(5行代码)如下:
from flask import Flask #引入Flask
from config import Config #第1个config,引入Config类
app = Flask(__name__) #创建Flask的实例app
app.config.from_object(Config)#第2个config是Flask中的属性。面说明本句
from app importroutes #本文无用
首先从flask引入Flask类。
从本项目的config(第1个config)模块中,引入Config类。
按生成Flask的惯例,创建实例app。
Flask有属性config(第2个config),此属性是一个Config类,有方法from_object,可以用dir(app.config)查到。在后面会介绍。
注意本段代码中,此两个config是不同的对象,在flask的介绍中,经常出现同名的不同对象。
传入from_object的参数是引入Config类。类也是对象,可以当参数传递。
Config类在config模块中定义(共3行代码)如下:
import os
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
在Config的类,含有类属性SECRET_KEY。
这里也有两个同名的不同对象,左面SECRET_KEY是调用os.environ.get返回的对象,作为Config类的类变量,中间SECRET_KEY是调用os.environ.get时,代入以字符串的形式表示的参数。os.environ是一个存取环境变量的类,环境变量的值用get方法获取,本例是获取名称为'SECRET_KEY'环境变量的值。
os.environ,也可以看作字典变量,例如当环境变量'SECRET_KEY'存在时,可以使用os.environ['SECRET_KEY']。
当环境变量'SECRET_KEY'可能不存在,则可使用字典的get方法,以提供当环境变量的确不存在时,默认的返回值。可使用两种方式提供默认值,一种是上例中使用操作符or:当or之前的运算结果不为空字符时,运算结果为or之前的运算结果,否则为or之后的结果。所以当没有此名字的环境变量时,有:
>>>os.environ.get('SECRET_KEY','you-will-never-guess')
'you-will-never-guess'
也可使用字典变量的get方法,提供默认值:
>>>SECRET_KEY = os.environ.get('SECRET_KEY','you-will-never-guess')
>>>SECRET_KEY
'you-will-never-guess'
现在解释__init__.py中的
app.config.from_object(Config)
首先注意builtins中的(可点击)dir的功能是列出的所有可见的属性。
return analphabetized list of names comprising (some of) the attributes
of the givenobject, and of attributes reachable from it.
现在可以看flask\from_object:
def from_object(self, obj):
if isinstance(obj, string_types):
obj = import_string(obj)
for key in dir(obj):
if key.isupper():
self[key]= getattr(obj, key)
本例传送的obj是Config类,不是字符串,因此isinstance(obj,string_tupes)为False,而不会根据字符串引入对象。
然后Config的所有属性,如果是大写的,将被存入以self为名字的字典中,即本例为app.config为名字的字典中。
执行文中的验证为:
>>>from microblog import app
>>>app.config['SECRET_KEY']
'you-will-never-guess'
环境变量的设置与所用的系统相关,可以百度“环境变量的设置 python”,但举的例子都是对名称为path的环境变量进行设置,相信都熟悉。但本例是对名称为SECRET_KEY的环境变量进行设置。对于window,如果设置过虚拟环境venv,也可以如下设置
set SECRET_KEY="12345678"
执行文中的验证结果为:
>>>from microblog import app
>>>app.config['SECRET_KEY']
'12345678'
为密码安全,一般使用后缀为.env的文件,设置密码,
相应修改config文件为:
import os
from dotenv importload_dotenv
basedir = os.path.abspath(os.path.dirname(__file__))
load_dotenv(os.path.join(basedir, '.env'))
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
microblog的程序,只有一行。
from app import app
第一个app是pakeage,即app文件夹所包含的pakeage,后一个app是flask的实例,在__init__中的那个app:
app =Flask(__name__)
flask配置config详解的更多相关文章
- App.Config详解及读写操作
App.Config详解及读写操作 App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而 ...
- App.Config详解
App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是c ...
- c# App.Config详解
c# App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序. 配置文件的根 ...
- Python安装、配置图文详解(转载)
Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(I ...
- [转载]App.Config详解及读写操作
App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是c ...
- 【和我一起学python吧】Python安装、配置图文详解
Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境( ...
- reids配置参数详解
转自:http://www.jb51.net/article/60627.htm reids配置参数详解 #daemonize no 默认情况下, redis 不是在后台运行的,如果需要在后台运行, ...
- Dubbo配置方式详解
Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是阿里巴巴 SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次 ...
- Redis配置参数详解
Redis配置参数详解 /********************************* GENERAL *********************************/ // 是否作为守护进 ...
- (转)App.Config详解及读写操作
App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是c ...
随机推荐
- [fiddler的使用]模拟自动回复功能在模拟测试mock第三方对接系统的返回中的使用场景
[场景描述]在许多对第三方的测试过程中,由于第三方没有测试环境或者测试环境同步开发的时候还未准备好,或者系统间联调时对方还未完成的各种情况下,我们可以通过fiddler来模拟对方的返回. [操作步骤] ...
- char值转换为int怎么才能不是ASCII值
直接将char类型的变量强制转换为int类型是不行的,那样只会传递变量所对应的ASCII码 怎么才能将char类型转换为int类型呢?String类型的可以通过方法转换为int类型.那是不是可以将ch ...
- vite+vue3使用unplugin-auto-import 无需手动引入api!
近期了解到unplugin-auto-import这个插件 用途是无需每个组件内重复的引入vue vue-router等内置方法 下面举个例子 <script setup> import ...
- KMP算法学习记录
Foreword: 初学KMP匹配算法,不得其门,总感觉自己想,想不出来,看书上文字解释晦涩难懂.不能准确的捕捉算法设计时候的灵光和思路 .于是自己试着完成了一遍,现将过程记录下来,以供复习. Con ...
- 【jupyter notebook】配置基于ecs云平台的jupyter notebook远程使用
学校提供了ecs云服务器进行高性能运算 分配到了云主机后想在上面搭好jupyter notebook服务器方便远程使用,在此记录整个流程和遇到的问题 本文档适用于常规的jupyter notebook ...
- __declspec(dllimport) 和 __declspec(dllexport)的使用详解、以及 XX_API 的含义
1. C++代码里调用别人的库.或者写库给别人用.大概有如下的方法(只讨论windows系统的情况): ---- a) 提供头文件 h . 静态库 lib -- > 静态链接 ---- b) ...
- Java学习笔记-BigDecimal类型
1.介绍 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更 ...
- jquery input标签的禁用和启用disabled
input框使用disabled后 input 元素既不可用,也不可点击.可以设置 disabled 属性,直到满足某些其他的条件为止(比如选择了一个复选框等等).然后,就需要通过 JavaScrip ...
- VC9.0 for Python2
python2安转包时提示: pip install xxx时,提示 Microsoft Visual C++ 9.0 is required 下载并安装: 链接:https://pan.baidu. ...
- 数制、ip地址及子网
一.数制 数制:计数的方法,指用一组固定的符号和统一的规则表示数值的方法 数位:指数字符号在一个数中所处的位置 基数:指在某种进制计数中,数位上所能使用的数字符号的个数 位权:指在某种进制计数中,数位 ...