Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah cara yang betul untuk membaca dan menulis konfigurasi dalam projek Python?

Apakah cara yang betul untuk membaca dan menulis konfigurasi dalam projek Python?

PHPz
PHPzke hadapan
2023-05-09 19:16:061667semak imbas

Apakah cara yang betul untuk membaca dan menulis konfigurasi dalam projek Python?

1 Tulis konfigurasi dalam fail Python

Kaedah ini sangat mudah, tetapi ia mempunyai masalah keselamatan yang serius Konfigurasi ditulis dalam kod Jika seseorang memuat naik kod sumber kami ke github, maka konfigurasi pangkalan data adalah sama dengan didedahkan kepada dunia Sudah tentu, konfigurasi mudah ini juga boleh dilakukan apabila fail konfigurasi tidak mengandungi maklumat sensitif. kaedah.

2. Gunakan fail konfigurasi luaran

untuk menjadikan fail konfigurasi dan kod bebas Format fail json, yaml atau ini biasanya digunakan untuk menyimpan konfigurasi.

Gabungkan pembolehubah persekitaran dan perpustakaan python untuk membaca fail luaran Pertama sekali, pembangunan biasanya tidak bersentuhan dengan persekitaran pengeluaran, jadi fail konfigurasi persekitaran pengeluaran ditulis oleh operasi dan penyelenggaraan, dan operasi dan penyelenggaraan akan digunakan semua Selepas konfigurasi yang diperlukan ditulis, letakkannya di lokasi yang ditentukan pada pelayan pengeluaran, dan kod membaca konfigurasi dari lokasi yang ditentukan.

Untuk memudahkan penyahpepijatan bersatu program, pembolehubah persekitaran sistem (XXX_CONFIG_PATH) boleh dipersetujui terlebih dahulu untuk menentukan laluan storan fail konfigurasi.

Contohnya: eksport XXX_CONFIG_PATH =
/home/test/configs/config.ini
Ini adalah untuk menetapkan pembolehubah persekitaran sementara

pembolehubah persekitaran linux, ubuntu

查看环境变量:
 env
 设置永久环境变量
 1.在/etc/profile 的文件下编辑,所改变的环境变量是面向所有用户的
 export CLASSPATH = /../...该路径为绝对路径
 2.在当前用户目录下./barsh_profile文件中修改 进行修改的话,仅对当前的用户生效
 vim /home/wens/.barshc
 export CLASSPATH = /../...该路径为绝对路径
 最后使用source命令 可以直接使环境变量生效
 source/home/wens/.barshc //直接跟环境变量的文件

pembolehubah persekitaran windows

查看环境变量:
 set
 查看某个环境变量:
 set path
 修改环境变量
 输入 “set 变量名=变量内容”即可。比如将path设置为“d:nmake.exe”,只要输入set path="d:nmake.exe"
 注意:所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改。也就是说当关闭此cmd命令行窗口后,将不再起作用。
 永久性修改环境变量的方法有两种:
 一种是直接修改注册表
 另一种是通过我的电脑-〉属性-〉高级,来设置系统的环境变量(查看详细) 
 设置了环境变量后,需要重启 pycharm 生效

3. Gunakan terus pembolehubah persekitaran sistem untuk membaca konfigurasi

Kaedah ini Ia adalah perkara biasa dalam amalan untuk tidak menggunakan fail untuk menyimpan maklumat konfigurasi, tetapi untuk menyimpan semua maklumat konfigurasi dalam pembolehubah persekitaran Operasi dan penyelenggaraan menggunakan skrip penggunaan yang boleh digunakan untuk mengimport maklumat yang perlu dikonfigurasikan ke dalam pembolehubah persekitaran sebelum menjalankan program. .

Tidak menggunakan storan fail menguatkan perlindungan maklumat konfigurasi seperti kata laluan pada tahap tertentu, tetapi ia juga meningkatkan beban kerja operasi dan penyelenggaraan, terutamanya apabila konfigurasi perlu diubah suai.

4. Seni bina perkhidmatan mikro

Dalam sesetengah seni bina perkhidmatan mikro, pusat konfigurasi akan dibangunkan khas, dan program akan membaca secara langsung konfigurasi dari dalam talian dan pengurusan konfigurasi juga akan Membangunkan GUI untuk memudahkan pembangunan dan operasi dan penyelenggaraan.

5. Kaedah konfigurasi yang disyorkan dalam projek umum

-app
-__init.py
-app.py
-settings
 -__init__.py
 -base.py
 -dev.py
 -prod.py

Antaranya, tambah logik penghakiman dalam __init__.py untuk menentukan sama ada persekitaran semasa harus digunakan untuk persekitaran pembangunan Atau persekitaran pengeluaran, dengan itu memuatkan parameter konfigurasi yang berbeza.

# settings/__init__.py
 import os
 # os.environ.get() 用于获取系统中的环境变量,因为在生产环境中,一般都会把一些关键性的参数写到系统的环境中。
 # 所以PROFILE的值其实就是我们配置的环境变量的值。如果没有配这个值,默认走dev的配置。
 # PYTHON_PRO_PROFILE = os.environ.get("PYTHON_PRO_PROFILE", "dev")
 PYTHON_PRO_PROFILE = os.environ.get("PYTHON_PRO_PROFILE")
 print("是开发环境还是生产环境: ", PYTHON_PRO_PROFILE) 
 if PYTHON_PRO_PROFILE == "dev":
 from .dev import *
 elif PYTHON_PRO_PROFILE == "prod":
 from .prod import *
 else:
 raise Exception("Not supported runtime profile {}".format(PYTHON_PRO_PROFILE))

di mana base.py menyimpan beberapa konfigurasi biasa, dan kemudian dalam persekitaran pembangunan dev.py dan persekitaran pengeluaran prod. Import pembolehubah base.py ke dalam py.

# settings/base.py
 import os
 import time
 # os.path.abspath: 获取完整路径(包含文件名)
 current_exec_abspath = os.path.abspath(__file__)
 current_exec_dir_name, _ = os.path.split(current_exec_abspath)
 current_up_dir, _ = os.path.split(current_exec_dir_name)
 current_up2_dir, _ = os.path.split(current_up_dir)
 print('------log dir=------', current_up2_dir)
 # 日志文件路径设置
 log_path = f"{current_up2_dir}/logs"
 if not os.path.exists(log_path):
 os.makedirs(log_path)
 t = time.strftime("%Y_%m_%d")
 log_path_file = f"{log_path}/interface_log_{t}.log"

di mana dev.py:

# 导入了base下所有参数
 from .base import *
 database = {
 "protocol": "mysql+mysqlconnector",
 "username": "xxxxxx",
 "password": "hash string",
 "port": 3306,
 "database": "repo"
 }

di mana prod.py:

# 导入了base下所有参数
 from .base import *
 database = {
 "protocol": "xxxxxxxxxxx",
 "username": "xxxxxxxxxxx",
 "password": "xxxxxxxxxxx",
 "port": 3344,
 "database": "xxxx"
 }
 对于一些敏感信息可在环境变量里设置,通过如下方法获取,例如:
 MAIL_SERVER = os.environ.get('MAIL_SERVER', 'smtp.163.com') 
 MAIL_USERNAME = os.environ.get('MAIL_USERNAME') or 'test'
 MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') or '12345678'

Atas ialah kandungan terperinci Apakah cara yang betul untuk membaca dan menulis konfigurasi dalam projek Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam