为什么需要权限管理?
项目开发中,访问各种外部资源时,经常会遇到各种权限认证的情形,比如发起 HTTP 请求时,通常需要提供 token 、私人 id 或其他密钥。通常来说,最好把权限的使用控制在一定的范围之内,将开发环境和生产环境的权限使用隔离开来。在协同开发的场景下,通常你可以在项目下建立两个不同的文件:config.ini
和 config.ini.example
,前者是你在本地运行代码需要的验证信息,后者是生产环境验证信息模板。但是,这样做有一个问题,当开发者 git push
的时候,岂不是两个验证文件大家都可以看到了?其实,要解决这个问题很简单,只需要在项目下新建一个 .gitignore
文件。.gitignore
文件的作用是告诉 Git 在推送本地修改的时候忽略哪些文件,比如该例中可以添加一行 *.ini
,即项目中所有以 .ini
后缀结束的文件在推送中都会被忽略。这样,项目中的其他成员就看不到 config.ini
配置文件了,而他们可以按照你提供的 config.ini.example
模板在他们自己的开发环境中建立一个 config.ini
文件,并且也按照你的方法建立 .gitignore
文件,所以你也看不到他的配置信息。
configparser 在权限管理中的应用
下面简单介绍在 Python 中如何用 configparser
来完成项目中的参数配置需求。
在 Python 中,一般可以通过 configparser
库来灵活配置参数。Python2 下该模块名为 ConfigParser,到 Python3 才改为 configparser。ini 文件模板,
1 | [DEFAULT] |
数据读取
configparser 的使用方法很简单,配置文件信息读取进来之后,默认 DEFAULT
的节不显示。你可以把每个 section 或变量的名字视为字典中一个个的 key,这样通过调用 key 就能取到对应的 value 值。有两种方式,一种是 section['key']
,另外一种是 section.get('key')
,两种方式的效果一样。
1 | >>> import configparser |
有一点需要注意的地方,configparser 并不会去猜测配置文件中的数据类型,因为它会把所有的数据都视为字符串型,这就意味着如果你需要其他类型的数据,需要额外的转换数据操作。比如,对整数型和浮点型的需求
1 | >>> int(topsecret['Port']) |
也可以这样来实现
- getint()
- getfloat()
1 | >>> config.getint('topsecret', 'Port') |
比如,对逻辑判断型 boolean
数据的需求
- getboolean()
1 | >>> topsecret.getboolean('ForwardX11') |
数据写入
数据写入的方式也很简洁,比如用 add_section('new section')
方法给配置文件添加与 [bitbucket.org]
同等级别的节 new section
。用 set()
方法给新添加的节设置新的配置信息,比如
1 | config.set('new section', 'an_int', '99') # 整型 |
本文主要介绍了在项目开发中权限处理的背景以及实现方式,简单介绍了 configparser 的使用方法,深入了解可以继续参考官方文档。