Dynaconf鏄疨ython鐨勭涓夋柟妯″潡锛屾棬鍦ㄦ垚涓哄湪Python涓鐞嗛厤缃殑鏈€浣抽€夋嫨銆傚畠鍙互浠庡悇绉嶆潵婧愯鍙栬缃紝鍖呮嫭鐜鍙橀噺銆佹枃浠躲€佹湇鍔″櫒閰嶇疆绛夈€傞€傜敤浜庝换浣曠被鍨嬬殑Python绋嬪簭锛屽寘鎷現lask鍜孌jango鎵╁睍1.鍦ㄥ紑濮嬩箣鍓嶏紝闇€瑕佺‘淇漃ython鍜宲ip宸茬粡鍦ㄤ綘鐨勭數鑴戜笂瀹夎鎴愬姛鐒跺悗锛岃閫夋嫨浠ヤ笅浠绘剰涓€绉嶆柟寮忚緭鍏ュ懡浠ゅ畨瑁呬緷璧栵細Windows鐜鎵撳紑Cmd锛堝紑濮?杩愯-CMD锛塎acOS鐜鎵撳紑Terminal锛堝懡浠?绌烘牸杩涘叆Terminal锛夊鏋滀綘鏄娇鐢╒SCode缂栬緫鍣ㄦ垨鑰匬ycharm锛屽彲浠ョ洿鎺ュ湪鐣岄潰涓嬫柟浣跨敤Terminal銆俻ip瀹夎dynaconf2銆傝寮€濮嬩娇鐢―ynaConf锛岃鍦ㄩ」鐩殑鏍圭洰褰曚腑杩愯dynaconfinit鍛戒护銆俢dpath/to/your/project/dynaconfinit-ftoml浼氬嚭鐜扮被浼煎涓嬬殑杈撳嚭锛岃〃绀哄垵濮嬪寲瀹屾垚锛氣殭锔忛厤缃綘鐨凞ynaconf鐜----------------------------------------馃悕鏂囦欢`config.py`宸茬敓鎴愩€傪煄涳笍settings.toml宸插垱寤轰互淇濆瓨鎮ㄧ殑璁剧疆銆傪煍?secrets.toml鏄负淇濆瓨浣犵殑绉樺瘑鑰屽垱寤虹殑銆傪煓?secrets.*涔熷寘鍚湪`.gitignore`涓紝娉ㄦ剰涓嶈灏嗕綘鐨勭瀵嗘帹閫佸埌鍏叡浠撳簱銆傪煄塂ynaconf宸查厤缃紒鍦╤ttps://dynaconf.com涓婇槄璇绘洿澶氬唴瀹规洿鏀逛簡toml鏍煎紡銆傚叾瀹炰綘涔熷彲浠ラ€夋嫨toml|yaml|json|ini|py锛屼絾鏄痶oml鏄粯璁ょ殑涔熸槸鏈€鎺ㄨ崘鐨勯厤缃牸寮忋€傚垵濮嬪寲瀹屾垚鍚庯紝浼氬垱寤轰互涓嬫枃浠讹細.鈹溾攢鈹€config.py#闇€瑕佸鍏ョ殑閰嶇疆鑴氭湰鈹溾攢鈹€.secrets.toml#瀵嗙爜绛夋晱鎰熶俊鎭殑閰嶇疆鈹斺攢鈹€settings.toml#搴旂敤閰嶇疆鍒濆鍖栧悗锛屼綘鍙互鍐欎綘鐨勯厤缃紝缂栬緫settings.toml:key="value"a_boolean=falsenumber=1234a_float=56.8a_list=[1,2,3,4]a_dict={hello="world"}[a_dict.nested]other_level="nestedvalue"鐒跺悗浣犲彲浠ュ湪浠g爜涓鍏ュ拰浣跨敤杩欎簺閰嶇疆锛歠romconfigimportsettingsassertsettings.key=="value"assertsettings.number==789assertsettings.a_dict.nested.other_level=="nestedvalue"assertsettings['a_boolean']isFalseassertsettings.get("DONTEXIST",default=1)==1濡傛灉鏄瘑鐮佺瓑鏁忔劅淇℃伅锛屽彲浠ュ湪.secrets閰嶇疆.toml:password="s3cr3t"token="dfgrfg5d4g56ds4gsdf5g74984we5345-"message="杩欎釜鏂囦欢涓嶄細杞埌浣犵殑pubr鐢靛瓙鎶モ€濄€?secrets.toml鏂囦欢灏嗚嚜鍔ㄦ坊鍔犲埌.gitignore鏂囦欢涓紝骞朵笖姝や俊鎭笉浼氫笂浼犲埌Git瀛樺偍搴撱€傚悓鏃讹紝DYNACONF杩樻敮鎸佸甫鍓嶇紑鐨勭幆澧冨彉閲忥細exportDYNACONF_NUMBER=789exportDYNACONF_FOO=falseexportDYNACONF_DATA__CAN__BE__NESTED=valueexportDYNACONF_FORMATTED_KEY="@format{this.FOO}/BAR"exportDYNACONF_TEMPLATED_KEY="@jinja]v[spa'{'}}鈥?銆傚浜庨珮绾т娇鐢紝鎮ㄨ繕鍙互鍦‵lask鎴朌jango涓娇鐢―ynaConf銆備互Django涓轰緥銆傜涓€姝ユ槸纭繚宸茶缃瓺JANGO_SETTINGS_MODULE鐜鍙橀噺锛歟xportDJANGO_SETTINGS_MODULE=yourproject.settings鐒跺悗鍦ㄤ笌manage.py鐩稿悓鐨勬枃浠跺す涓繍琛屽垵濮嬪寲鍛戒护锛歞ynaconfinit-fyaml骞舵寜鐓х粓绔笂鐨勮鏄庢搷浣滐細Django妫€娴嬪埌搴旂敤绋嬪簭鈿欙笍閰嶇疆鎮ㄧ殑Dynaconf鐜-----------------------------------------馃帥锔忓垱寤簊ettings.yaml浠ヤ繚瀛樻偍鐨勮缃€傪煍戝垱寤?secrets.yaml浠ヤ繚瀛樻偍鐨勭瀵嗐€傪煓?secrets.yaml涔熷寘鍚湪.gitignore涓敞鎰忎笉瑕佸皢鎮ㄧ殑绉樺瘑鎺ㄩ€佸埌鍏叡浠撳簱浣跨敤dynaconf瀵筕ault鐨勫唴缃敮鎸丼ervers.鈦塸ath/to/yourproject/settings.py鎵惧埌浜嗚娣诲姞dynaconf鍚楋紵[y/N]:鍥炵瓟y:馃帬鐜板湪浣犵殑Django璁剧疆鐢盌ynaconf绠$悊馃帀Dynaconf宸查厤缃紒鍏充簬admoreonhttps://dynaconf.com鍦―jango涓婏紝鎺ㄨ崘鐨勬枃浠舵牸寮忔槸yaml锛屽洜涓哄畠鍙互鏇村鏄撳湴淇濆瓨澶嶆潅鐨勬暟鎹粨鏋勶紝浣嗕綘浠嶇劧鍙互閫夋嫨浣跨敤toml銆乯son銆乮ni鐢氳嚦淇濆瓨浣犵殑閰嶇疆鍒濆鍖杁ynaconf鍚庡浜?py鏍煎紡锛屽湪鐜版湁settings.py鐨勫簳閮ㄥ寘鍚互涓嬪唴瀹癸細#HERESTARTSDYNACONFEXTENSIONLOADimportdynaconf#noqasettings=dynaconf.DjangoDynaconf(__name__)#noqa#HEREENDSDYNACONFEXTENSIONLOAD锛堟琛屼笅鏂规病鏈夋洿澶氫唬鐮侊級鐜板湪锛屽湪鎮ㄧ殑Django瑙嗗浘銆佹ā鍨嬪拰鎵€鏈夊叾浠栧湴鏂癸紝鎮ㄧ幇鍦ㄥ彲浠ユ甯镐娇鐢╠jango.conf.settings锛屽洜涓哄畠宸茶Dynaconf璁剧疆瀵硅薄鍙栦唬銆俧romdjango.confimportsettingsdefindex(request):assertsettings.DEBUGisTrueassertsettings.NAME=="Bruno"assertsettings.DATABASES.default.name=="db"assertsettings.get("NONEXISTENT",2)==2鐜板湪淇敼manage.py鍚屾枃浠跺す涓嬬殑閰嶇疆鏂囦欢锛屽嵆鍙娇閰嶇疆鍏ㄥ眬鐢熸晥銆備互涓婂氨鏄湰娆″垎浜殑鍏ㄩ儴鍐呭銆傝寰楁枃绔犺繕涓嶉敊鐨勮瘽锛岃鍏虫敞鍏紬鍙凤細Python缂栫▼瀛︿範鍦堬紝姣忔棩骞茶揣鍒嗕韩锛屽彂閫佲€淛鈥濊繕鑳介鍙栧ぇ閲忓涔犺祫鏂欍€傛垨鑰呭幓缂栫▼瀛︿範缃戜簡瑙f洿澶氱紪绋嬫妧鏈煡璇嗐€?/p>
