文档章节

[Django]Windows下Django配置Apache示范设置

zhengyijie
 zhengyijie
发布于 2013/12/26 17:36
字数 1862
阅读 93
收藏 0

[Django]WindowsDjango配置Apache示范设置

Version

Date

Creator

Description

1.0.0.1

2006-11-20

郑昀

草稿

 

继续阅读之前,我们假设您熟悉以下知识:

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_ROOTSTATIC_PATHTEMPLATE_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>

 

配置DjangoApache的步骤:

如何在Windows环境下安装Apachemod_Python 这篇Blog解释得很明白,我下面的这些步骤得到了验证。

1

 http://httpd.apache.org/

来获取apache_2.2.3-win32-x86-no_ssl.msi这个安装文件;

运行这个msi即可顺利安装Apache。

2

网络上有很多说可以利用Apachemod_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://files.cnblogs.com/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

配置Apachehttpd.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 。”

为了让图片、cssscript能够被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>

 

LimodouStep by step特地说“同时可以注意到 settings 我改为了 settings_apache 了。一方面将要把其中的内容有关相对路径的东西改为绝对路径,另一方面我还想保持现在的 settings.py ”这也是一个很好的做法。

最后,修改MaxRequestsPerChild1,这是一个可选项。Limodou是这么说的“同时如果你不想每次重启Apache 来进行测试,可以将: MaxRequestsPerChild 0. 改为: MaxRequestsPerChild 1

 

重启Apache服务。

6

浏览 http://localhost:80/mysite/ 即可。

7:

跑admin 工具界面:http://localhost:80/mysite/admin/

出现界面如下:

输入使用manage.py syncdb 生成时设置的数据名和密码,便可以进入。


 

[参考资料]

1:《How to use Django with mod_pythonDjango官方文档

2:《HOWTO: Django on Windows》这篇blog给了我很大的帮助

3:《Django Step by Step (十二)limodou的帮助文档

4:《如何安装 Django

本文转载自:http://www.cnblogs.com/zhengyun_ustc/archive/2006/11/20/django_apache_win32.html

上一篇: Django web 开发
下一篇: 死记英文单词
zhengyijie

zhengyijie

粉丝 9
博文 53
码字总数 32131
作品 0
广州
程序员
私信 提问
Django 1.6 在Windows平台下的部署

Django 1.6在Windows平台下的配置 Django 1.6 在Windows平台下的配置 DocumentRoot "D:/www/django/zend"ServerName localhostAliasMatch ^/([^/]*.css) "d:/www/django/zend/static/styles/......

yubochinese
2014/03/30
0
0
Django 站点部署和管理常用命令

原文:Django 站点部署和管理常用命令 作者:Breaker 通过 The Django Book 学习建立、部署和管理 Django 站点的笔记,内容重点 章节 12:部署 Django Django 与 The Django Book 版本对应关...

晨曦之光
2012/05/23
6.9K
0
CentOS7.4 部署 Django + Python3 + Apache + Mod_wsgi

安装环境 Remote: CentOS 7.4 x64 (django.example.com) Python: Python3.6.5 Apache: Apache 2.4.6 Mod_wsgi: 4.6.4 Django: Django 2.0.4 一. 系统环境配置 1.关闭 iptables 和 selinux 修......

xjtuhit
2018/04/19
0
0
win7安装Apache并部署django环境

一、概述 大多数python开发都在windows环境下,python django mysql 环境的部署是常见的环境,windows下安装mysql,python基本是安装,下一步即可,帮不作介绍,主要介绍django apache兼容环...

dyc2005
2017/10/22
0
0
Windows环境下,将Django部署到Apache Web Server

在Windows上部署Django(用mod_wsgi)会出现各种奇怪的问题,现简单记录下配置过程及遇到的错误及解决方法。 环境搭建 windows 7 python 2.7.3 (注意最好是32位的,因为Apache目前对64位支持非...

zhoujie0111
2014/03/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

八、RabbitMQ的集群原理

集群架构 写在前面 RabbitMQ集群是按照低延迟环境设计的,千万不要跨越WAN或者互联网来搭建RabbitMQ集群。如果一定要在高延迟环境下使用RabbitMQ集群,可以参考使用Shovel和Federation工具。...

XuePeng77
今天
1
0
mac系统下,brew 安装mysql,用终端可以连接,navicat却连接不上?

问题: 1.报错? 2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found 2.自己通过设置,已经把密......

写bug的攻城狮
昨天
2
0
老生常谈,HashMap的死循环

问题 最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。 由于HashMap...

群星纪元
昨天
5
0
拉普拉斯算子

拉普拉斯算子是二阶微分算子。 我们知道,一维离散信号一阶微分公式如下: 相应的,一维离散信号二阶微分公式如下: 由于图像有x和y两个方向,因此图像信号属于二维离散信号。其在x,y两个...

yepanl
昨天
3
0
记录"正则表达式"

详细请查看我的博客:https://blog.enjoytoshare.club/article/RegularExpression.html 1 写在前面 正则表达式(Regular Expression)在代码中常常简写为regex。正则表达式通常被用来检索、替...

wugenqiang
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部