1. 程式人生 > >如何設定django專案的設定(settings.py)和部署檔案(requirements.txt)

如何設定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==

Djangosettings.py設定安裝軟體路徑,遇到 'Settings' object is not subscriptable報錯

1、由於在搞一個匯出pdf的功能時,需要指定下面的一個配置,程式碼如下: config = pdfkit.configuration(wkhtmltopdf='D:\\SoftWare\\wkhtmltopdf\\bin\\wkhtmltopdf.exe') 2、但是專案

Django簡單設定cookiessession

一、Cookie   cookie及特點   Cookie是由伺服器(網站)生成的,儲存在瀏覽器端的 鍵值對資料(通常經過加密) 在響應請求時,伺服器會把生成 Cookie資料 發給瀏覽器,瀏覽器會自動儲存(前提:瀏覽器開啟了coo

Python在Windows中設定託管以太坊節點使用類庫Web3.pyInfura

如果你想與以太坊區塊鏈進行互動以獲取最新區塊的詳細資訊,可以使用乙太網節點、本地節點或託管節點連線到以太坊區塊鏈的交易資訊或傳送交易。由於有許多第三方外掛和應用程式可用於執行此操作,你可能會認為我們為什麼需要一個節點。如果要部署智慧合約或使用指令碼自動與智慧合約互動,則需要設定節點,而當前的