经过了连续两天的跟踪,django终于在俺的机器上跑起来了。 走了不少弯路,想想还是把遇到的问题写下来吧,让大家能够节省点时间。 * 下载 apache 2.0.54: [[http://archive.apache.org/dist/httpd/binaries/win32/apache_2.0.54-win32-x86-no_ssl.msi|点击下载]] mod_python 3.1.4: [[http://mirror.vmmatrix.net/apache/dist/httpd/modpython/mod_python-3.1.4.tgz|源码下载]] 没找到win32版本的,自己编译, 配置两个环境变量'''PYTHONSRC'''和'''APACHESRC''', 用python对应的编译器(python2.4=vc71)编译即可,win32版本的mod_python 3.1.4可以到http://www.lehuen.com/nicolas/download/mod_python/下载 pyscopg1 1.1.18: [[http://stickpeople.com/projects/python/win-psycopg/win-psycopg24-pg8.0.zip|点击下载]] posggresql 8.0: [[http://wwwmaster.postgresql.org/download/mirrors-ftp?file=binary%2Fv8.0.3%2Fwin32%2Fpostgresql-8.0.3.zip|点击选择合适的下载]] * Apache配置 httpd.conf: {{{ # 修改DocumentRoot DocumentRoot "d:/myproject/django/wwwpub" # 此处是你的web发布目录, 用于存放静态文件 # 修改下面对应DocumentRoot项的标记 .... # 省略 # 增加下面的标记,用于映射url http://localhost:8080/admin/下的访问 SetHandler mod_python PythonHandler django.core.handler SetEnv DJANGO_SETTINGS_MODULE testproj.settings.admin }}} 细心的朋友会发现上面没有映射根(/), 因为俺也没有研究出来, 当按/admin/的方式映射根时, 根下所有的静态文件都不能访问了(必然的结果:(), 等adrian的教程3吧 * Python配置 保证django在sys.path中能够找到 ( 以下部分抄自原版教程, 只说关键部分吧 ) * 初始化项目 在wwwpub之外随便找一个目录,但要求能在sys.path中找到, 执行: {{{ python xxxx\django\bin\django-admin.py startproject testproj }}} 该命令会在当前执行目录下建立一个testproj目录,用于存放该项目的model,url映射,视图和模版. 执行后,进入testproj\apps, 执行: {{{ python xxxx\django\bin\django-amdin.py startapp polls }}} 该命令就建立了一个polls目录, 里面就可以放置testproj项目的polls应用的具体内容了. 编辑testproj\settings\main.py, 配置数据库参数 执行set DJANGO_SETTINGS_MODULE=testproj.settings.main, 注意不要加引号, 教程里加引号win下不正确 执行 {{{ python xxxx\django\bin\django-amdin.py init }}} 来初始化数据库. 按教程说明编写polls.py文件. 并配置testproj.settings.main中的INSTALLED_APPS 执行 {{{ python xxxx\django\bin\django-amdin.py install polls }}} django会自动根据polls.py文件中的模型建表. 按照教程01中''Playing with the API''的内容操作. 此处体现了python的强大. 你只需要定义一个模型对象, 所有的操作自动给你构造好了. OK, 完成这一小节的操作后,数据库中就增加了几条记录了. * 使用管理界面 拷贝 trunk下的media目录到wwwpub下, 启动apache server看看能不能访问/media/img/下的图片 按照教程02中''Create a user account''的内容创建一个用户. 使用 http://127.0.0.1:8080/admin/ 登录管理界面. 如果登录不报错, 但总是在登录界面循环, 需要在testproj.settings.admin中增加 {{{ REGISTRATION_COOKIE_DOMAIN = '127.0.0.1' }}} * 管理polls项目的对象 很简单,按照教程一步一步来就行了. ( 继续教程,我们来实现我们自己的应用 ) * 配置URL映射 在testproj.settings.urls.main 中的urlpatterns中加入一行: {{{ #python (r'^polls/', include('testproj.apps.polls.urls.polls')), }}} 然后后在 testproj.apps.polls.urls.polls中加入一行: {{{ #python (r'^(?P\d+)$, 'polls.view_poll')), }}} 注意此处只是指定的polls.view_poll,因为在这行只上有一个限定前缀 {{{ #python urlpatterns = patterns('testproj.apps.polls.views', }}} * 配置template目录 在testproj.settings.main中增加: {{{ #python TEMPLATE_DIRS = ( r'D:\myproject\django\trunk\testproj\apps\polls\templates' , ) }}} 确定该目录的存在,尽量不要把模版文件放到wwwpub目录下 * 实现Views 来个最简单的吧 testproj.apps.polls.views.polls: {{{ # coding: gb2312 from django.models.polls import polls from django.core import template_loader from django.core.extensions import DjangoContext as Context from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect def view_poll( request , id ): p = polls.get_object( id__exact = '1' ) t = template_loader.get_template('viewpoll') c = Context(request, {'pollobj': p }) return HttpResponse(t.render(c)) }}} * 实现模版viewpoll 在templates目录下建立文件viewpoll.html {{{ test {{ pollobj.question }} }}} * 最后一步,配置mod_python {{{ # 增加下面的标记,用于映射url http://localhost:8080/polls/下的访问 SetHandler mod_python PythonHandler django.core.handler SetEnv DJANGO_SETTINGS_MODULE testproj.settings.main }}} 启动apache,然后访问http://localhost:8080/polls/1看看有没有效果 :) OK,大功告成。现在你可以随意发挥了。美中不足的就是还不能把根映射为应用,当然在/index.htm里面直接重定向也可以。 另外使用polls/aaa.htm这种静态页面也没有办法,只能增加一个url映射然后用file读出来。 django还需要进化。 * 体会 URL mapping很有效。 model 的实现相当精美。特别是数据库直接建表。但是再使用一段时间后改表只能用 djangoamdin sql 命令将sql导出再人工处理了。不过作者已经做了足够多了。 另外middleware仅仅是功能的扩充。也算是server段的hack代码吧 其他,还没体会出来。。。 -- * fluke 的 Apache配置(补充上面没有能解决的根的问题) {{{ # setting up a normal virtual host # 这个虚拟主机不用经过mod_python ServerName sgu.ospattern.net DocumentRoot "/var/www/sgu.ospattern.net/html" SetHandler NONE # optional a django_ojs path # 这个和上面的那个配置一样 SetHandler python-program PythonHandler django.core.handlers.modpython PythonPath "['/home/fluke/Projects'] + sys.path" SetEnv DJANGO_SETTINGS_MODULE django_ojs.settings PythonDebug On # setting up a vertual host # 这里就不一样了,设置了基于域名的虚拟主机,根目录也是django的 :) ServerName ojs.ospattern.net SetHandler python-program PythonHandler django.core.handlers.modpython # 下面设置路径 PythonPath "['/home/fluke/Projects'] + sys.path" SetEnv DJANGO_SETTINGS_MODULE django_ojs.settings #SetEnv ROOT_URLCONF django_ojs.urls PythonDebug On # leave the /media/ dir for serving css & img files SetHandler None # leave the /phpMyAdmin/ dir for manage the database SetHandler None # leave img files not be interpreted by python SetHandler None }}} 希望这个配置对某些人有用:) -- {{{ -- 张骏 }}}