Windows apache django 配置指南

來源:互聯網
上載者:User
一、軟體準備:
1.1 python-2.5.1.msi
1.2 apache_2.2.8-win32-x86-no_ssl.msi
1.3 Django-0.96.1.tar.gz
1.4 mod_python-3.3.1.win32-py2.5-Apache2.2.exe
1.5 MySQL-python-1.2.2.win32-py2.5.exe

二、安裝步驟:
2.1 安裝python(運行python-2.5.1.msi即可,完成以後,設定環境變數)
2.2 mysql-python(運行MySQL-python-1.2.2.win32-py2.5.exe即可)
2.3 安裝apache(運行apache_2.2.8-win32-x86-no_ssl.msi)
2.4 安裝apache的module:mod_python(運行mod_python-3.3.1.win32-py2.5-Apache2.2.exe,安裝最後完成階段,會提示讓選擇apache的路徑,選擇2.4中apache的安裝路徑即可)
2.5 安裝django
2.5.1 解壓縮兩次,得到檔案夾Django-0.96.1。 把這個檔案夾放到你的開發目錄下,建議不要放在案頭,最好放在D:/Dev/之類的目錄下,注意最好是英文,而且檔案夾名不要有空格。
2.5.2在命令提示字元下進入該目錄,輸入:cd D:/Dev/Django-0.96.1
再輸入命令:python setup.py install
(這時螢幕會滾動顯示一大堆東西,不要管它了,你也看不清)
OK了。
2.5.3先簡單的測試一下。
命令提示字元下,輸入:python
然後輸入import django
然後輸入django.VERSION
我看到的是這樣的:
>>> import django
>>> django.VERSION (0, 96.099999999999994, None)
>>>
2.5.4 設定環境變數(將 ../ python2.5.1/Lib/site-packages/django/bin加入path的環境變數中)
2.6    建立django project並測試
C:/django_src>cd /
C:/>mkdir django
C:/>cd django
C:/django>django-admin.py startproject myproject
C:/django>cd myproject
建立完成以後,開啟settings.py檔案,設定資料庫(建議設定成mysql,2.2已經安裝了python的mysql驅動,可以使用mysql)
DATABASE_ENGINE = 'mysql'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
DATABASE_NAME = 'django_demo'             # Or path to database file if using sqlite3.
DATABASE_USER = 'root'             # Not used with sqlite3.
DATABASE_PASSWORD = 'root'         # Not used with sqlite3.
DATABASE_HOST = '10.1.120.12'             # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.
同步資料庫:
在同步資料庫前,需要先在mysql資料庫中建立資料庫 django_demo,否則無法執行資料庫DDL
C:/django/myproject>python manage.py syncdb
啟動django內建的server:
C:/django/myproject>python manage.py runserver
Validating models...
0 errors found.
2.7 Enable mod_python handlers for Django
    我們用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、script能夠被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>

#配置靜態檔案許可權,讓apache有權訪問
<Directory "E:/program/python2.5.1/Lib/site-packages/django/contrib/admin/media">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>
#設定不緩衝,這樣修改python原始碼以後,可以自己載入,正式發布的時候,這個要去掉
MaxRequestsPerChild 1

# file types we want to serve statically
# case insensative match
<LocationMatch "(?i)/.(jpg|gif|png|txt|ico|pdf|css|jpeg)$">
       SetHandler None
</LocationMatch>

三、常見錯誤
3.1 常見錯誤現象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服務。

3.2 常見錯誤現象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>

3.2 常見錯誤3
在使用django裡面使用sqlite資料庫的時候,由於採用的是檔案資料庫,在啟動apache的時候,由於apache的使用者權限問題,導致無法正
確載入資料庫檔案,在訪問http://localhost:80/mysite/的時候,可能會報找不到session表的錯誤。
懶得折騰檔案許可權問題,直接將django的資料庫改用mysql即可。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.