在Django
项目中,我创建了一个.env
文件来存储我的应用程序的秘密凭证。我使用console命令来生成一些凭证。这是我的初始.env
文件
SECRET_KEY=CHANGE_IT
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=database_name
DB_USERNAME=database_username
DB_PASSWORD=database_password
DB_SCHEMA=database_schema_name
这是我的generate_secret
控制台命令,用随机字符串覆盖SECRET_KEY
import re
import os
from django.core.management import BaseCommand
from django.core.management.utils import get_random_secret_key
class Command(BaseCommand):
help = ''
def handle(self, *args, **options):
env_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../../.env'))
self.set_secret_key(env_path, get_random_secret_key())
@staticmethod
def set_secret_key(env_file_path, secret_key):
fp = open(env_file_path, 'r+')
current_env = fp.read()
regex = r"(SECRET_KEY=.*?)\n"
matches = re.findall(regex, current_env, re.MULTILINE)
updated_env = current_env.replace(matches[0], 'SECRET_KEY={}'.format(secret_key))
fp.truncate(0)
fp.write(updated_env)
fp.close()
问题是,当我运行这个命令时,它会正确地覆盖SECRET_KEY
,但也会在.env
文件的开头添加一堆有线字符。我在Ubuntu 18.04
操作系统上运行。这是运行命令后的.env
文件
我不知道为什么,但我不能复制这些有线字符,所以我附上了它的截图。你知道吗
不知道为什么,但是
fp.truncate(0)
似乎是罪魁祸首(更多信息请参见Behaviour of truncate() method in Python)。你知道吗就我个人而言,我会分两步来做:首先读取文件,然后重写。你知道吗
如果您想一步完成,请按照Open file for reading and writing with truncate的建议在
fp.truncate()
之前使用fp.seek(0)
。你知道吗相关问题 更多 >
编程相关推荐