分类: Python/Ruby
2008-09-21 18:47:14
一、软件准备: 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为: 静态资源文件的存放目录:c:/django/myproject/media 项目文件夹路径:c:/django/myproject 好了,此时你就应该在httpd.conf文件的最后附加这段配置,以便让Apache知道到哪里去定位myproject/settings.py文件: 增加的配置行 # mysite目录路径: c:/django/myproject, # 但是对于PythonPath,必须设置成这个目录的上一级目录! # this site url: 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 SetHandler None #Alias /media 是将 Django Admin 的静态文件设置一个 URL 的访问别名。 Alias /media c:/Django-0.95/django/contrib/admin/media SetHandler None #配置静态文件权限,让apache有权访问 AllowOverride None Options None Order allow,deny Allow from all #设置不缓存,这样修改python源代码以后,可以自己加载,正式发布的时候,这个要去掉 MaxRequestsPerChild 1 # file types we want to serve statically # case insensative match SetHandler None 三、常见错误 3.1 常见错误现象1 关键词: client denied by server configuration。 表象: 访问了 后,假如发现图片没有加载,或者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 403错误,就说明是权限问题。 此时,请到httpd.conf,增加如下配置来允许静态资源文件夹被访问: 增加的配置行 # 对需要访问的区域,可以增加正确的Directory块 # 否则会得到这样的错误:client denied by server configuration: c:/Django/myproject/media/css/global.css, referer: http:/ /localhost:80/mysite/ Order Deny,Allow Allow from all 重启Apache服务。 3.2 常见错误现象2 关键词: EnvironmentError: Could not import settings。 表象: 访问了 后,直接页面报告如下错误: 页面错误输出 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: SetHandler python-program PythonPath "sys.path+['c:/django']" PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE myproject.settings PythonInterpreter mysite PythonDebug On 3.2 常见错误3 在使用django里面使用sqlite数据库的时候,由于采用的是文件数据库,在启动apache的时候,由于apache的用户权限问题,导致无法正确加载数据库文件,在访问的时候,可能会报找不到session表的错误。 懒得折腾文件权限问题,直接将django的数据库改用mysql即可。 |