安裝(全部爲Centos6.7環境下)
python單一版本環境安裝
(系統已自帶python2.6情況下)
注意!!由於系統已經自帶python2.6,自己又編譯安裝了python2.7,如果此時直接用yum 安裝yum install python-pip 會安裝到python2.6上,必須編譯安裝pip才行,而pip的安裝又依賴setuptools,系統自帶了0.6的setuptools,我們必須下載另一個setuptools手動安裝,用python27 setup.py install 這樣安裝就會安裝到2.7下了,之後就可以順利安裝pip了,安裝pip後,再做一個軟鏈接到/usr/bin/下
1、python2.7的安裝
解決依賴
yum -y install readline-devel
下載python2.7.6,保存到 ~/soft
http://www.python.org/ftp/python/
http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz
2、解壓文件
tar zxvf Python-2.7.6.tgz
3、創建安裝目錄
mkdir /usr/local/python/python27
4. 安裝python
cd ~/soft/Python-2.7.6
./configure --prefix=/usr/local/python/python27
make
make install
5. 修改新版本的ln指向
ln -s /usr/local/python/python27/bin/python/usr/bin/python27
以後只要運行python27即可,系統自帶的版本不能動
6、安裝setuptools
下載 https://pypi.python.org/packages/source/s/setuptools/setuptools-0.7.2.tar.gz
tar xvzf setuptools-0.7.2.tar.gz
cd setuptools-0.7.2
python27 setup.py install
7、安裝pip
下載 https://pypi.python.org/pypi/pip/
tar xvzf pip-8.1.2.tar.gz
python27 setup.py install
8、做Pip軟連接
ln -sv /usr/local/python27/bin/pip /usr/bin/pip
(pip的升級)
pip install --upgrade pip
python多版本開發環境安裝
1、安裝pyenv
安裝依賴:
yum -y install gcc gcc-c++ make git patch openssl-develzlib-devel readline-devel sqlite-devel bzip2-devel
安裝pyenv(安裝到/root/.pyenv):
git clone https://github.com/yyuu/pyenv.git /root/.pyenv
echo 'export PYENV_ROOT="/root/.pyenv"'>> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"'>> ~/.bashrc
echo 'eval "$(pyenv init -)"' >>~/.bashrc
2、安裝具體python版本
# 如果命令行下載安裝Python太慢,可以將下載的安裝包放入/root/.pyenv/sources/下對應的安裝版本的目錄中後安裝。具體這樣:
例如要安裝2.7.11版本的python ,就把下載好的安裝文件放到/root/.pyenv/sources/2.7.11/Python-2.7.11.tar.gz 注意!如果沒有2.7.11目錄就新建一個,文件名是Python-2.7.11.tar.gz,並不是顯示的Python-2.7.11.tgz,一般運行一次pyenv install 2.7.11後,它就會自動在sources下生成對應的版本目錄和文件名,可以進去參考。安裝文件放到相應位置後 pyenvinstall 2.7.11 –k安裝即可
# 查看可提供的Python版本列表
pyenv install --list
pyenv install 2.7.11 -v
pyenv install 3.5.1 –v
#重建環境變量
pyenv rehash
# 查看已安裝Python版本
pyenv versions
其他常用命令:
#卸載
pyenv uninstall 2.7.5
#設置本地的特定目錄的Python版本
pyenv local 2.7.5
#設置全局的python版本
pyenv global 2.7.5
#查看當前所有版本
prenv versions
3.安裝virtualenv,插件形式pyenv-virtualenv
git clone https://github.com/yyuu/pyenv-virtualenv.git/root/.pyenv/plugins/pyenv-virtualenv --其中/root/.pyenv 是你安裝pyenv的目錄
exec "$SHELL" --重新加載shell,更新環境變量
#查看當前虛擬環境
pyenv virtualenvs
切換到新的虛擬環境的命令爲
pyenv activate env271
切換回系統環境, 運行這個命令即可
pyenv deactivate
4、安裝pip
切換到需要安裝的虛擬環境:
pyenv activate env271
直接用yum安裝即可
yum -y install python-pip
(pip的升級)
pip install --upgrade pip
5、安裝ipython
可以利用pip安裝
pip install ipython
部署前的一些配置
關閉Debug模式
當用命令 django‐admin.py startproject創建了一個項目 , 其中創建的 settings.py 文件的 DEBUG
設置默認爲 True。django會根據這個設置來改變他們的行爲, 如果 DEBUG 模式被開啓:
所有的數據庫查詢將被保存在內存中, 以django.db.connection.queries 的形式.消耗很多內存!
任何404錯誤都將呈現django的特殊的404頁面,而不是普通的404頁面。
你的應用中任何未捕獲的異常,從基本的python語法錯誤到數據庫錯誤以及模板語法錯誤都會返回漂亮的Django錯誤頁面。 這個頁面包含了比404錯誤頁面更多的敏感信息。
只有在開發調試階段纔會開啓Debug模式,在項目的settings.py中,DEBUG = False即可關閉
關閉debug模式後,我們必須自定義404和500的返回頁面,在項目的templates下定義404.html和500.html,404.html可以使用模板來繼承生成,但500.html不行
配置錯誤時發送Email警報信息
1、主要通過settings.py配置以下選項(新增即可):
fromdjango.core.mail import send_mail 先導入send_mail模塊
EMAIL_BACKEND= 'django.core.mail.backends.smtp.EmailBackend' 默認是這個,可以不配
EMAIL_HOST= 'smtp.sina.com' #SMTP地址,如果只配置發送本地郵件的話,這個可以不寫,默認就是EMAIL_HOST = ‘localhost’
EMAIL_HOST_USER= '[email protected]' #自己的郵箱名,如果只配置發送本地郵件的話下面幾項的配置都不用了
EMAIL_PORT= 587 #SMTP端口
EMAIL_HOST_PASSWORD= 'password' #自己的郵箱密碼
EMAIL_SUBJECT_PREFIX= '2BiTT' #爲郵件Subject-line前綴,默認是'[django]'
EMAIL_USE_TLS= True #與SMTP服務器通信時,是否啓動TLS鏈接(安全鏈接)。默認是false,根據實際情況配置
2、基本使用方法:
發送郵件最簡單的函數是send_mail,函數位於django.core.mail模塊下面,函數原型如下:
send_mail(subject,message, from_email, recipient_list, fail_silently=False,auth_user=None,auth_password=None, connection=None)
subject:一個字符串,主題
message:郵件內容,也是一個字符串
from_email:發送郵箱,一個字符串類型的字符串,要求和EMAIL_HOST_USER一致
recipient_list:一個列表,元素是接收郵箱字符串,每一個接收郵箱用一個字符串表示
fail_silently:是否安靜的失敗,如果是,發送失敗不拋出異常,否則拋出一個smtplib.SMTPException
auth_user:認證發送郵箱用戶名,如果不提供,將使用EMAIL_HOST_USER 的值
auth_password:郵箱密碼,如果不提供,使用EMAIL_HOST_PASSWORD 的值
connection:發送郵件用的後端,如果不提供,將使用 Email backends的值
例:
send_mail('subject','message','root@localhost',['dx@localhost','root@localhost'],fail_silently=False)
以發送人root@localhost發送一份郵件到dx@localhost和root@localhost
mail_admins()
語法:mail_admins(subject, message, fail_silently=False, connection=None,html_message=None)
提供了一個給管理員發送郵件的快捷方式,啓用這個功能的話,先要在你的設置文件裏面配置好ADMINS和SERVER_EMAIL,前者是收件人,後者是發件人。如果你提供了html_message的話,郵件內容會被替換成html_message的內容
還有mail_managers(),和mail_admins類似
語法:mail_managers(subject, message, fail_silently=False, connection=None,html_message=None)
send_mass_mail()
語法:send_mass_mail(datatuple, fail_silently=False, auth_user=None,auth_password=None,connection=None)
send_mass_mail()提供了一個把發送內容封裝成元組然後再封裝在一個元組裏面的參數datatuple,這有利於批量發送編輯好的郵件,datatuple每一個元素都是以下的格式
(subject,message, from_email, recipient_list)
send_mass_mail的其他參數和send_mail的一樣
例:
message1= ('Subject here', 'Here is the message', '[email protected]',['[email protected]', '[email protected]'])
message2= ('Another Subject', 'Here is another message', '[email protected]',['[email protected]'])
send_mass_mail((message1,message2), fail_silently=False)
3、各種郵件後端
我們可以指定不同的郵件後端去適用不同的場景
SMTP後端
默認的郵件後端,這是真的將郵件發送到指定郵箱的後端
EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'
Console後端
console後端把郵件寫入到stdout 在python27 manager.py runserver 控制檯上輸出顯示,測試用比較直觀
EMAIL_BACKEND ='django.core.mail.backends.console.EmailBackend'
文件後端
把郵件寫到文件裏面,需要提供一個EMAIL_FILE_PATH參數,可以在配置文件settings.py裏面直接指明,或者用get_connection()函數裏面傳入file_path關鍵字參數
EMAIL_BACKEND ='django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH ='/tmp/app-messages'
內存中的後端
發送的郵件存在內存中。。。。。
EMAIL_BACKEND ='django.core.mail.backends.locmem.EmailBackend'
假後端
如其名,假的
EMAIL_BACKEND ='django.core.mail.backends.dummy.EmailBackend'
設置連接中斷警報
如果你安裝有CommonMiddleware(比如,你的MIDDLEWARE_CLASSES設置包含了’django.middleware.common.CommonMiddleware’的情況下,默認就安裝了CommonMiddleware),你就具有了設置這個選項的能力:有人在訪問你的Django網站的一個非空的鏈接而導致一個404錯誤的發生和連接中斷的情況,你將收到一封郵件. 如果你想激活這個特性,設置SEND_BROKEN_LINK_EMAILS 爲True(默認爲False),並設置你的MANAGERS爲某個人或某些人的郵件地址,這些郵件地址將會收到報告連接中斷錯誤的郵件. MANAGERS使用和ADMINS 同樣的語法.例如:
MANAGERS= (
('GeorgeHarrison', '[email protected]'),
('RingoStarr', '[email protected]'),
)
針對生產環境、測試環境或不同環境設置配置文件settings.py
平時開發或學習時我們通常使用一個單一的設置文件 settings.py文件由django-admin.py startproject命令生成。但是當你準備要進行配置的時候,你將發現你需要多個配置文件以使你的開發環境和產品環境相獨立。比如,你可能不想每次在本地機器上測試代碼改變的時候將DEBUG從False 改爲True。Django通過使用多個配置文件而使得這種情況很容易得到避免。
有三種實現方法(推薦第三種方法):
1. 設置成兩個全面的,彼此獨立的配置文件
直接把settings.py複製一份即可
2. 設置一個基本的配置文件(比如,爲了開發)和第二個(爲了產品)配置文件,第二個配置文件僅僅從基本的那個配置文件導入配置,並對需要定義的進行復寫.
例:
# settings.py
DEBUG = True
TEMPLATE_DEBUG = DEBUG
DATABASE_ENGINE = 'postgresql_psycopg2'
DATABASE_NAME = 'devdb'
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_PORT = ''
# settings_production.py
from settings import *
DEBUG = TEMPLATE_DEBUG = False
DATABASE_NAME = 'production'
DATABASE_USER = 'app'
DATABASE_PASSWORD = 'letmein'
3. 使用一個單獨的配置文件,此配置文件包含一個Python的邏輯判斷根據上下文環境改變設置。
# settings.py
import socket
if socket.gethostname() == 'dx.com':
DEBUG = TEMPLATE_DEBUG = True
else:
DEBUG = TEMPLATE_DEBUG = False
apache/nginx+Django+Gunicorn的部署
安裝 Gunicorn
安裝gunicorn 就是簡單地pip install gunicorn
運行,將Django 作爲一個WSGI 應用在Gunicorn 中運行
Gunicorn安裝後,可以使用一個gunicorn 命令來啓動Gunicorn 服務器進程。最簡單地,gunicorn 的調用只需要在其調用位置具有一個包含WSGI application 對象的模塊,該對象的名稱必須爲名爲application。所以在一個Django 項目中,調用gunicorn 就像這樣:
gunicorn myproject.wsgi
它將啓動一個進程,它運行一個線程並監聽在127.0.0.1:8000。
注意!它要求你的項目位於Python 的路徑中;保證這點最簡單的方法就是在與manage.py 文件所在的相同目錄中運行這個命令。
gunicorn命令其他參數:
-b 監聽ip和端口,默認是 127.0.0.1:8000 如:0.0.0.0:80
-w 開啓多個進程 如 -w 8
-k gunicorn默認使用同步阻塞的網絡模型(-k sync),對於大併發的訪問可能表現不夠好, 它還支持其它更好的模式,比如:gevent或meinheld。
先pip installgevent然後使用gevent模型 -kgevent
-c 可以用配置文件
最後可以 nohup -w 4 -k gevent gunicorn AutoSa.wsgi:application