Windows下Django配置Apache設置
n Python
n Django
n Apache
如果不熟悉這些知識點,可以看本文最后資源列表中的文章。
本文討論了在Windows環境下,將Django配置到Apache Web Server時所遇到的問題,以及最終解決的示范步驟。
您可以遵循后文描述的配置步驟,在此之前,我們先描述兩個常見的錯誤現象。
[常見錯誤現象1]
關鍵詞: client denied by server configuration。
表象: 訪問了http://localhost:80/mysite/ 后,假如發現圖片沒有加載,或者css沒有應用上,并且httpd.conf文件中Location的配置絕對路徑肯定沒錯。
解釋:
第一, 首先檢查httpd.conf配置Alias的配置,
看看Alias設置的路徑是否正確,
Alias /site_media c:/django/myproject/media
請保證您附加的這個路徑肯定是你的圖片或者css存放的路徑。
其次,請檢查您的django項目myproject目錄下的settings.py,保證MEDIA_ROOT、STATIC_PATH、TEMPLATE_DIRS這三個參數指向的絕對路徑正確無誤。
最后,如果上面的參數都沒錯,卻還是不行。那么請您檢查Apache的日志文件
Apache2.2\logs\error.log
如果您發現有這樣的錯誤提示:
錯誤日志
[Mon Nov 20 17:27:08 2006] [notice] Child 4172: Starting thread to listen on port 80.
[Mon Nov 20 17:27:08 2006] [error] [client 127.0.0.1] client denied by server configuration: c:/Django/myproject/media/css/global.css, referer: http://localhost:80/mysite/
那么說明是因為對這些資源文件的訪問被拒絕了。
此時,請您瀏覽 http://localhost:80/site_media/css/global.css ,如果遇到了HTTP 403錯誤,就說明是權限問題。
此時,請到httpd.conf,增加如下配置來允許靜態資源文件夾被訪問:
增加的配置行
# 對需要訪問的區域,可以增加正確的Directory塊
# 否則會得到這樣的錯誤:client denied by server configuration: c:/Django/myproject/media/css/global.css, referer: http:/ /localhost:80/mysite/
<Directory "c:/Django/myproject/media/">
Order Deny,Allow
Allow from all
</Directory>
重啟Apache服務。
[常見錯誤現象2]
關鍵詞: EnvironmentError: Could not import settings。
表象: 訪問了http://localhost:80/mysite/ 后,直接頁面報告如下錯誤:
頁面錯誤輸出
1. Mod_python error: “PythonHandler django.core.handlers.modpython”
Traceback (most recent call last):
File “C:\Python24\Lib\site-packages\mod_python\apache.py”, line 299, in HandlerDispatch
result = object(req)
File “c:\django_src\django\core\handlers\modpython.py”, line 163, in handler
return ModPythonHandler()(req)
File “c:\django_src\django\core\handlers\modpython.py”, line 125, in __call__
if settings.ENABLE_PSYCO:
File “c:\django_src\django\conf\__init__.py”, line 27, in __getattr__
self._import_settings()
File “c:\django_src\django\conf\__init__.py”, line 54, in _import_settings
self._target = Settings(settings_module)
File “c:\django_src\django\conf\__init__.py”, line 82, in __init__
raise EnvironmentError, “Could not import settings ‘%s’ (Is it on sys.path? Does it have syntax errors?): %s” % (self.SETTINGS_MODULE, e)
EnvironmentError: Could not import settings ‘myproject.settings’ (Is it on sys.path? Does it have syntax errors?): No module named myproject.settings
這是開始配置django+apache最容易遇到的問題,:D。
解釋:
這是因為apache在系統目錄下找不到myproject/settings.py文件。
首先檢查PythonPath設置的路徑是否正確:
PythonPath "sys.path+['c:/django']"
注意,這個'c:/django'路徑實際是我們的項目路徑c:/django/myproject的上一級目錄!不要寫錯了。
增加的配置行
# mysite目錄路徑: c:/django/myproject,
# 但是對于PythonPath,必須設置成這個目錄的上一級目錄!
# this site url:http://localhost:80/mysite/
<Location "/mysite/">
SetHandler python-program
PythonPath "sys.path+['c:/django']"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myproject.settings
PythonInterpreter mysite
PythonDebug On
</Location>
配置Django到Apache的步驟:
如何在Windows環境下安裝Apache和mod_Python, 這篇Blog解釋得很明白,我下面的這些步驟得到了驗證。
1:從 http://httpd.apache.org/來獲取apache_2.2.3-win32-x86-no_ssl.msi這個安裝文件;運行這個msi即可順利安裝Apache。2:
網絡上有很多說可以利用Apache和mod_python源代碼來編譯安裝mod_python的,但是如果你僅僅想快速安裝,那么請從
http://www.apache.org/dist/httpd/modpython/win/3.2.10/
直接下載
mod_python-3.2.10.win32-py2.4-apache2.2.exe
文件,運行這個exe即可順利把mod_python安裝到Python2.4以及Apache2.2;
由于GFW的封鎖,可能您無法訪問apache網站,那么可以從這里下載:
http://www.cnblogs.com/Files/zhengyun_ustc/mod_python-3.2.10.win32-py2.4-apache2.2.rar
3:
我們用
Python django-admin.py startproject myproject
命令,在C盤的django目錄下創建了一個Django項目myproject。我們把它引用的圖片文件和css文件等靜態資源都放在myproject文件夾下的media目錄中。
此時,將myproject目錄下的settings.py文件中的這三個參數修改一下,主要是為了從相對路徑變成絕對路徑:
修改的配置行
# Django settings for myproject project.
'''
將相對路徑改為絕對路徑。主要有:
MEDIA_ROOT
TEMPLATE_DIRS
STATIC_PATH
'''
# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = 'c:/django/myproject'
STATIC_PATH = 'c:/django/myproject/media'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates".
# Always use forward slashes, even on Windows.
'c:/django/myproject/templates',
)
切記切記,一定要保證這三個參數是絕對路徑。
4:
配置Apache的httpd.conf配置文件:
首先,在“Dynamic Shared Object (DSO) Support”的配置下增加一行
LoadModule python_module modules/mod_python.so
這個必須手動添加。
5:
我們列出此時Apache所需要的參數分別為:
項目名:myporject
試圖訪問的URL為:http://localhost:80/mysite/
靜態資源文件的存放目錄:c:/django/myproject/media
項目文件夾路徑:c:/django/myproject
好了,此時你就應該在httpd.conf文件的最后附加這段配置,以便讓Apache知道到哪里去定位myproject/settings.py文件:
增加的配置行
# mysite目錄路徑: c:/django/myproject,
# 但是對于PythonPath,必須設置成這個目錄的上一級目錄!
# this site url:http://localhost:80/mysite/
<Location "/mysite/">
SetHandler python-program
PythonPath "sys.path+['c:/django']"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myproject.settings
PythonInterpreter mysite
PythonDebug On
</Location>
對于上面的配置,Limodou注釋道:“上面 PythonPath 主要是將 myproject的目錄加入到 sys.path ,以便 Django 可以找到。需要使用絕對路徑。
SetEvn 中設置的 DJANGO_SETTINGS_MODULE 就對應于你的 項目名.配置文件。因此為了能導入 項目名.配置文件,就需要前面的 PythonPath 的設置。
PythonDebug 和 PythonAutoReload 建議在生產時設為 Off !
為了讓圖片、css、能夠被Apache成功加載,還需要在httpd.conf最后附加這段配置:
增加的配置行
#Alias /site_media 是用來將 myproject的靜態文件設置一個 URL 訪問的別名。
Alias /site_media c:/django/myproject/media
<Location "/site_media/">
SetHandler None
</Location>
#Alias /media 是將 Django Admin 的靜態文件設置一個 URL 的訪問別名。
Alias /media c:/Django-0.95/django/contrib/admin/media
<Location "/media/">
SetHandler None
</Location>
# file types we want to serve statically
# case insensative match
<LocationMatch "(?i)\.(jpg|gif|png|txt|ico|pdf|css|jpeg)$">
SetHandler None
</LocationMatch>
Limodou在Step by step中特地說“同時可以注意到 settings 我改為了 settings_apache 了。一方面將要把其中的內容有關相對路徑的東西改為絕對路徑,另一方面我還想保持現在的 settings.py 。”這也是一個很好的做法。
最后,修改MaxRequestsPerChild為1,這是一個可選項。Limodou是這么說的“同時如果你不想每次重啟Apache 來進行測試,可以將: MaxRequestsPerChild 0. 改為: MaxRequestsPerChild 1”
重啟Apache服務。
6:
瀏覽 http://localhost:80/mysite/ 即可。
關鍵字:Windows Django 配置 Apache 設置
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解