日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django 1.6 部署

發(fā)布時(shí)間:2025/3/20 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django 1.6 部署 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

準(zhǔn)備工作


首先,將 settings.py 內(nèi)的 DEBUG 和 TEMPLATE_DEBUG 項(xiàng)設(shè)為 False。

然后,在 templates 目錄下實(shí)現(xiàn) 404 和 500 模板。

?

設(shè)置錯(cuò)誤警告

引發(fā)代碼異常時(shí)將給 ADMINS 內(nèi)的郵件地址發(fā)送錯(cuò)誤報(bào)告,啟用此功能需確保 django 的郵件發(fā)送功能正常:

ADMINS = ( ( ' John Lennon ' , ' jlennon@example.com ' ), ( ' Paul McCartney ' , ' pmacca@example.com ' ), )

當(dāng)用戶訪問一個(gè)非空鏈接卻導(dǎo)致了錯(cuò)誤 404 的發(fā)生和連接中斷的情況時(shí),可以選擇給 MANAGERS 發(fā)送錯(cuò)誤報(bào)告。此行為依賴于 CommonMiddleware 的啟用以及 SEND_BROKEN_LINK_EMAILS 值為 True。MANAGERS 的語法與 ADMINS 相同。

?

設(shè)置多個(gè)配置文件

django 會(huì)通過 DJANGO_SETTINGS_MODULE 環(huán)境變量來定位配置文件,其內(nèi)容可以通過“os.environ['DJANGO_SETTINGS_MODULE']”來查看。默認(rèn)情況下,其值被設(shè)為“mysite.settings”。

要為開發(fā)和生產(chǎn)環(huán)境設(shè)置不同的配置文件,如果使用兩個(gè)不同的文件,可以以一個(gè)為基準(zhǔn),另一個(gè)來導(dǎo)入,并覆蓋存在差異的項(xiàng):

# 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 '

如果使用一個(gè)文件,則需在文件內(nèi)進(jìn)行環(huán)境判斷,比如通過主機(jī)名:

# settings.py import socket if socket.gethostname() == ' my-laptop ' : DEBUG = TEMPLATE_DEBUG = True else : DEBUG = TEMPLATE_DEBUG = False # ...

?

注意:因?yàn)榄h(huán)境變量是進(jìn)程范圍的,所以當(dāng)你在同一個(gè)進(jìn)程中運(yùn)行多個(gè)站點(diǎn)時(shí)(比如 mod_wsgi),上面的這種配置不會(huì)起作用。這時(shí)你需要使用 mod_wsgi 的 daemon 模式,或者在 wsgi.py 文件中通過“os.environ.['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'”這種形式覆蓋。

?

WSGI


最早 Python 實(shí)現(xiàn) web server app 的方式是 CGI,不過因?yàn)槠鋾?huì)為每一個(gè)請求創(chuàng)建一個(gè)解釋器并且這個(gè)解釋器只處理這一個(gè)請求,而造成了很大的計(jì)算壓力。因此一個(gè)顯而易見的解決方案——使用一個(gè)內(nèi)存常駐的 Python 程序來處理全部請求,開始不斷被實(shí)現(xiàn)。

在這個(gè)過程中有兩種方式成為主流,一是設(shè)計(jì)整合進(jìn) web server 的 API,比如 mod-python,mod 是 module 的縮寫;另一種方式是獨(dú)立于 web server 的外部進(jìn)程,比如 FastCGI。

這兩種方式都已經(jīng)被證明為有效的。其中 server API 部署起來更簡單,也被 django 推薦給第一次學(xué)部署的人使用;而外部進(jìn)程則避免了前者可能帶來的 app 與 server 之間性能影響,以及需要編寫針對特定 server 的代碼等問題。

于是,(主要)針對這兩種不同實(shí)現(xiàn)而設(shè)計(jì)的 web server 與 web framework layer(app) 間的通用接口標(biāo)準(zhǔn)被創(chuàng)造出來,就是 Web Server Gateway Interface(WSGI) standard。注意 WSGI 并不是任何的 server、API 甚至不包含代碼實(shí)現(xiàn),它是一種對 API 的定義。

WSGI 應(yīng)用程序接口的實(shí)現(xiàn)是一個(gè)可調(diào)用對象。他總是接受兩個(gè)參數(shù):一個(gè)由服務(wù)器生成的環(huán)境變量字典,這個(gè)字典里的數(shù)據(jù)來自于客戶端的請求,以及另一個(gè)服務(wù)器提供的回調(diào)函數(shù)。這個(gè)回調(diào)函數(shù)接受 HTTP 狀態(tài)碼 和 HTTP 頭 來初始化一個(gè)響應(yīng)頭。WSGI 應(yīng)用程序則負(fù)責(zé)返回頁面的響應(yīng)負(fù)載。該負(fù)載應(yīng)當(dāng)是一個(gè)以可迭代對象形式封裝的字符串類型,比如簡單點(diǎn)的像列表,或者使用 yield 關(guān)鍵字也可以。這個(gè)響應(yīng)負(fù)載與初始化完成的響應(yīng)頭再由 WSGI server 組合到一起,并返回給客戶端。SAE 教程里提供了一個(gè) Hello world 的例子:

def app(environ, start_response): status = ' 200 OK ' response_headers = [( ' Content-type ' , ' text/plain ' )] start_response(status, response_headers) return [ ' Hello, world! ' ]

注意上例中的變量和參數(shù)格式,如 response_headers 必須是一個(gè)元組對(header_name, header_value)組成的列表。

Python 標(biāo)準(zhǔn)庫里也有一個(gè)名為 wsgiref 的簡單 wsgi server,可以用于測試:

>>> from wsgiref.simple_server import make_server,demo_app >>> httpd = make_server( '' , 8000 ,demo_app) >>> httpd.serve_forever() 127.0 . 0.1 - - [ 13 / Apr / 2014 15 : 55 :0 8 ] " GET / HTTP/1.1 " 200 4266 127.0 . 0.1 - - [ 13 / Apr / 2014 15 : 55 :0 8 ] " GET /favicon.ico HTTP/1.1 " 200 4206

在 django 中,這個(gè) WSGI app 的配置就保存在項(xiàng)目文件夾下的 wsgi.py 文件中,以 application 命名,是一個(gè)模塊級的變量。

更詳細(xì)的內(nèi)容,可以參考下面一個(gè)教程:http://webpython.codepoint.net/wsgi_tutorial

?

Apache + mod_wsgi


前面提到的 mod_python 現(xiàn)在已經(jīng)被棄用了,兼容 WSGI 的 mod_wsgi 是現(xiàn)行的標(biāo)準(zhǔn)。

?

基本配置

在安裝并激活 mod_wsgi 后,需要編輯 Apache 的 httpd.conf 文件,并添加下面的內(nèi)容。如果是 2.4 以后的版本,把下面的 Require all granted 換成 Allow from all:

WSGIScriptAlias / / path / to / mysite.com / mysite / wsgi.py WSGIPythonPath / path / to / mysite.com < Directory / path / to / mysite.com / mysite > < Files wsgi.py > Order deny,allow Require all granted </ Files > </ Directory >

第一行 WSGIScriptAlias 后面有兩個(gè)參數(shù)。前面的“/”是你想要啟用 app 服務(wù)的 URL 路徑,單斜杠代表網(wǎng)站的根目錄;后面的路徑指向系統(tǒng)里的“WSGI 文件”,通常位于項(xiàng)目包內(nèi)(例子中的 mysite)。這一行的作用是告訴 Apache 對該 URL 開頭的所有請求應(yīng)用那個(gè)“WSGI 文件”內(nèi)指定的 application。

第二行的 WSGIPythonPath 的作用是確保你的項(xiàng)目包在 python 的導(dǎo)入路徑之中。換句話說,就是保證“import mysite”這條語句可以執(zhí)行。

后面的 <Directory> 確保 Apache 可以訪問你的 wsgi.py 文件。

?

使用 virtualenv

virtualenv 是一個(gè) Python 虛擬環(huán)境管理工具,它可以為 django 創(chuàng)建一套獨(dú)立的運(yùn)行環(huán)境,以避免與其他程序之間可能因版本造成的兼容性問題。可以參考這篇文章:以正確的方式開始一個(gè) Django 1.6 項(xiàng)目

當(dāng)你使用了 virtualenv 的時(shí)候,你得把 virtualenv 的 site-packages 路徑添加到 Python 路徑中去。具體的作法為:把這條路徑添加到上面提到的 WSGIPythonPath 中,與已有的內(nèi)容之間用“:”隔開(windows 環(huán)境下用 ;)。像這樣:

WSGIPythonPath / path / to / mysite.com: / path / to / your / venv / lib / python2.X / site - packages

注意:如果路徑中任何一處有空格,一定要把整個(gè)參數(shù)引用起來。

?

使用 mod_wsgi 的 daemon mode

“daemon mode”是運(yùn)行 mod_wsgi 的推薦模式(非 windows 平臺上)。要?jiǎng)?chuàng)建必須的 daemon 進(jìn)程組并運(yùn)行 django 實(shí)例,就得添加適當(dāng)?shù)?WSGIDeamonProcess 和 WSGIProcessGroup 命令。另一項(xiàng)需要對上面的配置加以修改的地方是:你不能再用 WSGIPythonPath 這個(gè)變量了,而是使用 WSGIDaemonProcess 的 python-path 選項(xiàng),例如:

WSGIDaemonProcess example.com python - path =/ path / to / mysite.com: / path / to / venv / lib / python2. 7 / site - packages WSGIProcessGroup example.com

?

文件服務(wù)

django 本身并不提供文件服務(wù);這個(gè)工作應(yīng)當(dāng)由 web server 來做。

另外,我們建議使用一個(gè)單獨(dú)的 server 來做這項(xiàng)工作,與運(yùn)行 django 的獨(dú)立。比如:

  • lighttpd
  • Nginx
  • TUX
  • Apache 的簡化版
  • Cherokee

如果不得不把媒體文件服務(wù)放在同一個(gè) server 上,你可以為 Apache 設(shè)置一些 url 來處理靜態(tài)文件,其余的則通過 mod_wsgi 接口來交給 django 處理。

下例把 django 配置到了網(wǎng)站根目錄,但明確設(shè)定以靜態(tài)文件的方式提供 robots.txt、favicon.ico、CSS 文件和位于“/static/”與“/media/”URL 下的全部文件。所有其他的路徑交由 django 處理:

Alias / robots.txt / path / to / mysite.com / static / robots.txt Alias / favicon.ico / path / to / mysite.com / static / favicon.ico AliasMatch ^/ ([ ^/ ] * \.css) / path / to / mysite.com / static / styles / $ 1 Alias / media / / path / to / mysite.com / media / Alias / static / / path / to / mysite.com / static / < Directory / path / to / mysite.com / static > Order deny,allow Require all granted </ Directory > < Directory / path / to / mysite.com / media > Order deny,allow Require all granted </ Directory > WSGIScriptAlias / / path / to / mysite.com / mysite / wsgi.py < Directory / path / to / mysite.com / mysite > < Files wsgi.py > Order allow,deny Require all granted </ Files > </ Directory >

同樣,如果使用 Apache 2.4 以后的版本,把上面的 Require all granted 換成 Allow from all。

?

admin 文件服務(wù)

當(dāng) INSTALLED_APPS 中包含 django.contrib.staticfiles 的時(shí)候,django 開發(fā)服務(wù)器會(huì)自動(dòng)為 admin 和其他 app 的靜態(tài)文件提供服務(wù)。但當(dāng)你使用其他服務(wù)器的時(shí)候,情況就不是這樣了。你得自己為 Apache 或其他服務(wù)器,配置對 admin 文件的服務(wù)。

admin 文件位于 django 發(fā)布包的 django/contrib/admin/static/admin 位置

我們強(qiáng)烈建議使用 django.contrib.staticfiles 來處理 admin 文件(伴隨上面提到的 web server;這意味著,使用 collectstatic 管理命令來把靜態(tài)文件收集到 STATIC_ROOT,然后配置 web server,使其在 STATIC_URL 上為 STATIC_ROOT 提供服務(wù)),不過這里有三種另外的方法:

  • 創(chuàng)建一個(gè)從文檔根目錄指向 admin 靜態(tài)文件的軟連接(這可能需要在你的 Apache 配置文件中添加 FollowSymLinks)
  • 使用 Alias,像上面展示的那樣,把適當(dāng)?shù)?URL(比如 STATIC_URL + admin/)和 admin 文件的實(shí)際位置連接起來
  • 把 admin 文件拷貝到 Apache 文檔根目錄

?

uWSGI


這里沒有提到 web server 是因?yàn)?uWSGI 是一個(gè)獨(dú)立的外部進(jìn)程,類似于 FastCGI。因此可以任意搭配 web server 使用。現(xiàn)在似乎流行著一種選擇是 Nginx + uWSGI,或 Nginx + Apache + uWSGI,因?yàn)?Nginx 有很好的高并發(fā)處理能力,而且相對省資源。針對這種搭配,uWSGI 提供了一個(gè) tutorial:https://uwsgi.readthedocs.org/en/latest/tutorials/Django_and_nginx.html 下文僅針對 django 與 uwsgi 之間的整合進(jìn)行闡述。

?

安裝

可以簡單使用 pip 來安裝:

# Install current stable version. $ sudo pip install uwsgi # Or install LTS (long term support). $ sudo pip install http: // projects.unbit.it / downloads / uwsgi - lts.tar.gz

?

uWSGI 模型

uWSGI 工作在一種“客戶端-服務(wù)器”模式下。web server 與 django-uwsgi“worker”進(jìn)程交互以提供動(dòng)態(tài)服務(wù)。

?

配置和啟用 uWSGI server

uWSGI 支持多種進(jìn)程配置方式。下面展示一份啟動(dòng) uWSGI server 的示例命令:

uwsgi -- chdir =/ path / to / your / project \ -- module = mysite.wsgi:application \ -- env DJANGO_SETTINGS_MODULE = mysite.settings \ -- master -- pidfile =/ tmp / project - master.pid \ -- socket = 127.0 . 0.1 : 49152 \ # can also be a file -- processes = 5 \ # number of worker processes -- uid = 1000 -- gid = 2000 \ # if root, uwsgi can drop privileges -- harakiri = 20 \ # respawn processes taking more than 20 seconds -- max - requests = 5000 \ # respawn processes after serving 5000 requests -- vacuum \ # clear environment on exit -- home =/ path / to / virtual / env \ # optional path to a virtualenv -- daemonize =/ var / log / uwsgi / yourproject.log # background the process

上例假設(shè)你有一個(gè)頂層的 mysite 項(xiàng)目包,并且其 mysite/wsgi.py 模塊內(nèi)有一個(gè) WSGI application 對象。這種布局是你在使用 startproject 命令時(shí)默認(rèn)生成的。

其中針對 django 的選項(xiàng)為:

  • chdir : 指向目錄的路徑,需要包含在 python 的 import 路徑內(nèi)。即,包含有 mysite 包的那個(gè)路徑
  • module : 要使用的 WSGI 模塊,比如 mysite/wsgi.py 里面那個(gè)
  • env : 可能需要至少包含 DJANGO_SETTINGS_MODULE
  • home : 可選的,指向項(xiàng)目的 virtualenv 的路徑

ini 配置文件示例:

[uwsgi] chdir =/ path / to / your / project module = mysite.wsgi:application master = True pidfile =/ tmp / project - master.pid vacuum = True max - requests = 5000 daemonize =/ var / log / uwsgi / yourproject.log

ini 配置文件使用方法示例:

uwsgi -- ini uwsgi.ini

轉(zhuǎn)載于:https://my.oschina.net/lionets/blog/221812

總結(jié)

以上是生活随笔為你收集整理的Django 1.6 部署的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。