ConfigParser - 写入 .ini 文件

Bri*_*ian 5 python configparser flask

我有一个 config.ini 文件,其中包含 Web 应用程序的一些默认配置(使用 VS 2017 的 Flask)

我也想自己写一些配置。

我正在使用下面的代码尝试在该[keys]部分中写入,变量是gkey

def writeKey(key):
    Config = configparser.ConfigParser()    
    configFile = Path("config.ini")
    if configFile.is_file() == False:
        cfgfile = open("config.ini",'w')
    else:
        cfgfile = open("config.ini")

    # add the settings to the structure of the file, and lets write it out...
    Config.add_section('keys')
    Config.set('gkey','key',True)
    Config.write(cfgfile)
    cfgfile.close()

gkey = encrypt(key)
writeKey(gkey)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\blivo\documents\visual studio 2017\Projects\blivori2\blivori2\blivori2\functions\common.py", line 59, in <module>
    writeKey(gkey)
  File "C:\Users\blivo\documents\visual studio 2017\Projects\blivori2\blivori2\blivori2\functions\common.py", line 30, in writeKey
    Config.set('gkey','key',True)
  File "C:\Program Files\Python36\lib\configparser.py", line 1189, in set
    self._validate_value_types(option=option, value=value)
  File "C:\Program Files\Python36\lib\configparser.py", line 1174, in _validate_value_types
    raise TypeError("option values must be strings")
TypeError: option values must be strings
Run Code Online (Sandbox Code Playgroud)

我想问一个问题:

  • 将配置存储在 .ini 文件中是否合适?如果是这样,最好的方法是如何保护它不被公众阅读/曝光。

Mes*_*ion 4

.ini是的,在许多其他可能的解决方案中,将配置存储在文件上是常见的做法。为了安全起见,我强烈建议将其存储在网络根树之外的非公共文件夹中。这样你的Python应用程序可以读取它,但没有网络用户可以下载它。

关于您的错误:.ini选项值(和选项名称)必须是字符串,因此更改您的行:

Config.set('gkey','key',True)
Run Code Online (Sandbox Code Playgroud)

Config.set('gkey','key','True')  # or '1'
Run Code Online (Sandbox Code Playgroud)

然后使用 configparser 读取该值.getboolean()而不是.get()


另外,我强烈建议不要open()在没有with ...块的情况下使用。而且似乎没有充分的理由进行测试if,它被认为是 Python 中的反模式和糟糕的编程实践。使用标准模式可以使代码更简单、更健壮:

Config.set('gkey','key',True)
Run Code Online (Sandbox Code Playgroud)