<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>
[Django]Windows下Django配置Apache示范设置
Version
Date
Creator
Description
<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">1.0.0</span></chsdate>.1
<chsdate w:st="on" year="2006" month="11" day="20" islunardate="False" isrocdate="False"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">2006-11-20</span></chsdate>
郑昀
草稿
继续阅读之前,我们假设您熟悉以下知识:
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><p></p></directory>
Order Deny,Allow
Allow from all
重启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><p></p></location>
SetHandler python-program
PythonPath "sys.path+[' c:/django']"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myproject.settings
PythonInterpreter mysite
PythonDebug On
配置Django到Apache的步骤:
如何在Windows 环境下安装Apache 和mod_Python , 这篇Blog 解释得很明白,我下面的这些步骤得到了验证。
1 :
从 http://httpd.apache.org/
来获取apache_<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">2.2.3</chsdate>-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><p></p></location>
SetHandler python-program
PythonPath "sys.path+[' c:/django']"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myproject.settings
PythonInterpreter mysite
PythonDebug On
对于上面的配置,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><p></p></location>
SetHandler None
#Alias /media 是将 Django Admin 的静态文件设置一个 URL 的访问别名。
Alias /media c:/Django-0.95/django/contrib/admin/media
<location><p></p></location>
SetHandler None
# file types we want to serve statically
# case insensative match
<locationmatch><p></p></locationmatch>
SetHandler None
Limodou在Step by step中 特地说“同时可以注意到 settings 我改为了 settings_apache 了。一方面将要把其中的内容有关相对路径的东西改为绝对路径,另一方面我还想保持现在的 settings.py 。”这也是一个很好的做法。
最后,修改MaxRequestsPerChild 为1 ,这是一个可选项。Limodou 是这么说的“同时如果你不想每次重启Apache 来进行测试,可以将: MaxRequestsPerChild 0. 改为: MaxRequestsPerChild 1 ”
重启Apache服务。
6:
浏览 http://localhost:80/mysite/ 即可。
[ 参考资料]
1:《How to use Django with mod_python》Django官方文档
2:《HOWTO: Django on Windows》这篇blog给了我很大的帮助
3:《Django Step by Step (十二)》limodou的帮助文档
4 :《如何安装 Django》
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com