如何設定django專案的設定(settings.py)和部署檔案(requirements.txt)
在Django中的settings.py中可以修改130多項設定, 但大多數都繼承自預設值. 設定是在web伺服器啟動時首次載入的, 伺服器重啟時重新載入, 因此, 程式設計師們應儘量避免修改正式伺服器上使用的settings.py檔案. 以下是一些我們應當遵循的原則:
- 所有的設定檔案應當進行版本管理
- 不要重複自己 (don't repeat yourself)
- 妥善儲存關鍵資訊
之前, 我們採用的方法是, 不將設定檔案放入git庫中, 每個開發人員本地有一份自己的設定檔案. 但我們發現這樣做是錯誤的. 因為:
- 在debug之前, 我們可能已經花費了大量精力去模擬正式伺服器上出現的錯誤, 但最終發現這是由於正式伺服器的settings檔案設定和本地不同而 出現的問題. 這時你的心情會是怎樣?
- 當你在開發django專案時, 發現並修復了一個bug. 當將這一commit push到伺服器後, 你突然發現這一bug的出現完全是因為你修改了本地的 settings檔案而產生的, 而由於你的push, 又導致了伺服器的宕機. 這時你又會是怎樣的感受?
- 每個人都會從另一個程式設計師那裡拷貝/黏貼settings檔案內容, 這難道不是違反了"不要重複自己"的原則嗎?
正式由於這些問題, 所以我們現在採用不一樣的設定方式. 我們首先建立一個基本的設定檔案, 然後將開發和正式部署的設定檔案分離成不同的模組, 但 這些模組都繼承自同一個基本設定檔案:
1. 使用分離式的設定檔案
django專案建立時, 會自動生成settings.py檔案. 為了實現分離式的設定檔案, 我們首先刪除settings.py, 然後建立settings目錄:
settings/ __init__.py base.py local.py test.py production.py ...
設定檔案 | 目的 |
---|---|
base.py | 基本設定檔案, 在各個環境中都相同的設定可以放入其中. |
local.py | 當在開發時使用的設定檔案. 可以設定開發時的選項, 包括DEBUG, log的等級, 是否開啟例如 django-debug-toolbar等開發工具等. |
test.py | 執行test時的配置, 包括test runners, in-memory資料庫定義和log設定等. |
production.py | 當部署到正式伺服器上所用的設定. |
我們可以使用以下命令使用這些不同的設定檔案:
python manage.py shell --settings=mysite.settings.local python manage.py runserver --settings=mysite.settings.local
當然如果你熟悉 DJANGO_SETTINGS_MODULE 和 PYTHONPATH 的話, 也可以事先設定好 DJANGO_SETTINGS_MODULE 和 PYTHONPATH 環境變數, 這樣做的好處就是你不必使用--settings了.
如果你對virtualenv有深入的瞭解的話, 也可以在postactivate指令碼中設定 DJANGO_SETTINGS_MODULE 和 PYTHONPATH.
local.py的例子
# settings/local.pyfrom.baseimport* DEBUG =True TEMPLATE_DEBUG = DEBUG EMAIL_BACKEND ='django.core.email.backends.console.EmailBackend' DATABASES ={"defaults":{"ENGINE":"django.db.backends.postgresql_psycopg2","NAME":"weiguda","USER":"","PASSWORD":"","HOST":"localhost","PORT":"",}} INSTALLED_APPS +=("debug_toolbar",)
有時, 一個開發人員的配置檔案可能與另一個不同, 這時, 我們可以在settings目錄中新建local_name.py:
# settings/local_name.pyfrom.localimport*# 設定不同的配置 CACHE_TIMEOUT =30
2. 將關鍵資訊和設定檔案分離
將SECTET_KEY, AWS key檔案, API key檔案等關鍵資訊放入設定檔案中也是違反基本原則的. 因為:
- 配置環境不同時關鍵資訊會改變, 程式卻不會.
- 關鍵資訊不是程式.
- 關鍵資訊應當是隱蔽的, 如果儲存在了版本管理系統中, 則任何有權訪問該版本庫的使用者都能獲知這些關鍵資訊.
- 許多PAAS服務無法為每臺伺服器編輯設定檔案, 即使可以, 這也是不正確的做法.
環境變數
為了避免以上的問題, 我們使用環境變數 (environment variables) 來儲存這些關鍵資訊, (需要注意的是, apache不支援環境變數, 我們會在下面講到). 使用環境變數儲存關鍵資訊有以下好處:
- 將關鍵資訊從程式碼中移除, 這樣你就可以安心的將所有檔案放入版本管理系統中.
- 每個開發人員都擁有一樣的local.py檔案.
- 在部署django專案時, 不需要修改程式程式碼.
- 大多數PAAS都推薦這一方法, 並提供了方便的設定方法, 因此容易實現.
設定環境變數
在使用bash的Mac或Linux中設定環境變數比較容易, 你只需要將以下程式碼加入.bashrc, .bash_profile, 或.profile其中之一即可. 如果多個專案 使用相同的API, 並且關鍵資訊都不同時, 可以將以下程式碼加入到virtualenv的bin/activate指令碼中:
$ export SOME_SECRET_KEY=654-3jgwg-4r3-2t4h-76jk $ export ANOTHER_SECRET_KEY=y5y-5jk8-75i5h-5g4/.-,o.
如果使用的是windows系統, 則設定稍微複雜一點. 如果使用cmd.exe, 你必須使用setx命令一個一個的設定, 一個較好的方式是使用virtualenv的 bin/activate.bat
> setx OME_SECRET_KEY=654-3jgwg-4r3-2t4h-76jk
PowerShell是Windows Vista及以上自帶的shell, 它比cmd.exe強大得多. 因此可以使用PowerShell來設定環境變數:
# 為使用者User設定[Environment]::SetEnvironmentVariable("SOME_SECRET_KEY","654-3jgwg-4r3-2t4h-76jk","User")# 為全域性設定[Environment]::SetEnvironmentVariable("SOME_SECRET_KEY","654-3jgwg-4r3-2t4h-76jk","Machine")
如果你使用virtuanenvwrapper, 那麼可以使用virtualenvwrapper的pre-virtualenv設定環境變數, 這樣可能會更方便.
如果你使用PAAS, 則請參閱不同的PAAS提供的設定方法.
Redis 的安裝和基本使用以及在 Django 專案中的配置和使用
myRedis Redis的安裝好基本使用 環境 Python 3.6 Django 2.0.7 django-redis 4.9.0 Mac GitHub https://github.com/C
第一個django專案-通過命令列和pycharm兩種方式
以本機環境為例,ip地址為172.20.16.148,windows平臺,虛擬環境路徑為d:\VirtualEnv,專案存放位置為d:\DjangoProject 命令列方式 1.進入虛擬環境建立專案django-admin startproject projectname 專案的存
設定springboot專案預設不載入application.properties檔案
我們都知道,springboot專案啟動時會預設把classpath目錄下的application.properties檔案作為系統配置檔案,但如果我們想根據自己的意願載入別的檔案,比如beans.xml、config.xml等等。 設想一個場景,專案中有四個環
用Ant實現Java專案的自動構建和部署
Ant是一個Apache基金會下的跨平臺的構件工具,它可以實現專案的自動構建和部署等功能。在本文中,主要讓讀者熟悉怎樣將Ant應用到Java專案中,讓它簡化構建和部署操作。 一.安裝與配置 下載地址:http://ant.apache.org/,在本文中下載的是1.7.0版本。解壓到某
設定MyEclipse背景與字型大小和xml檔案中字型大小調整
程式碼編輯介面預設顏色為白色。對於長期使用電腦程式設計的人來說,白色很刺激我們的眼睛,所以改變workspace的背景色,可以使眼睛舒服一些。設定方法如下: 1、開啟window / Preference,彈出Preference面板 2、展開General標籤,選中Editors選項,
Ant詳解(用Ant實現Java專案的自動構建和部署)
Ant是一個Apache基金會下的跨平臺的構件工具,它可以實現專案的自動構建和部署等功能。在本文中,主要讓讀者熟悉怎樣將Ant應用到Java專案中,讓它簡化構建和部署操作。 一.安裝與配置 下載地址:http://ant.apache.org/,在本文
Jenkins + SVN + Batch Command (專案的自動打包和部署)
Jenkins + SVN 需求:將SVN上的指定專案(如: com.cr.dt)打成jar,併發布發到指定目錄(如: d\export2)。 SVN上的指定專案在Eclipse中顯示的目錄結構如下: E:\...\COM.CR.DT │ .classpath │ .
Eclipse設定:背景與字型大小和xml檔案中字型大小調整
Eclipse中程式碼編輯背景顏色修改:程式碼編輯介面預設顏色為白色。對於長期使用電腦程式設計的人來說,白色很刺激我們的眼睛,所以改變workspace的背景色,可以使眼睛舒服一些。設定方法如下:1、開啟window / Preference,彈出Preference面板
機器學習專案是如何開發和部署的?
>本文以一個小專案帶你弄清ML的專案流程 這周做作業查資料時,無意中看到一個GitHub專案[ML-web-app](https://github.com/imadelh/ML-web-app),它以PyTorch訓練MNIST文字識別模型為例,介紹了從`模型訓練`到`部署上線`的整個流程。是非常好的
python中.py和.pyw檔案的區別
以下是摘錄自百度問題的答案: 嚴格來說,它們之間的不同就只有一個:視窗執行它們的時候呼叫不同的執行檔案。 視窗用 python.exe 執行 .py ,用 pythonw.exe 執行 .pyw 。 這純粹是因為安裝視窗版 Python 時,副檔名 .py 自動被登記為
在Django下建立專案以及設定settings.py
進入虛擬環境建立目錄(在虛擬環境下不要使用sudo命令)1.在虛擬環境下安裝需要的安裝包(注意,不要用sudo命令,否則會安裝到真實環境下)pip3 install Django==1.11.8pip3 install pillowpip3 install pymysql==
Django在settings.py設定安裝軟體路徑,遇到 'Settings' object is not subscriptable報錯
1、由於在搞一個匯出pdf的功能時,需要指定下面的一個配置,程式碼如下: config = pdfkit.configuration(wkhtmltopdf='D:\\SoftWare\\wkhtmltopdf\\bin\\wkhtmltopdf.exe') 2、但是專案
Django簡單設定cookies和session
一、Cookie cookie及特點 Cookie是由伺服器(網站)生成的,儲存在瀏覽器端的 鍵值對資料(通常經過加密) 在響應請求時,伺服器會把生成 Cookie資料 發給瀏覽器,瀏覽器會自動儲存(前提:瀏覽器開啟了coo
Python在Windows中設定託管以太坊節點使用類庫Web3.py和Infura
如果你想與以太坊區塊鏈進行互動以獲取最新區塊的詳細資訊,可以使用乙太網節點、本地節點或託管節點連線到以太坊區塊鏈的交易資訊或傳送交易。由於有許多第三方外掛和應用程式可用於執行此操作,你可能會認為我們為什麼需要一個節點。如果要部署智慧合約或使用指令碼自動與智慧合約互動,則需要設定節點,而當前的