- 论坛徽章:
- 1
|
根据web.py官网上的todo list的例子,进行实际测试,并尝试使用不同的数据库,在这里与大家分享。
apache+wsgi主要是考虑到以后到生产环境中,使用oracle数据库是不大喜欢java,一直想用python的访存oracle数据库。
web.py学习的资料相对太少,前后折腾了20来天(工作空隙),才算上手,整个过程很艰难,一句一句注释掉,步步为营,查错,找原因。
主要就是apache+wsgi环境中,出错信息太少,找不到原因,后来热心的thinkc给出了查看apache日志的方法,查找出错原因,进度大大加快。
困扰的问题有:
1. webpy连接远程数据库的问题,
解决方法是增加host参数,如下:
db = web.database(dbn='postgres', db='postgres', user='postgres', pw='123456',host="127.0.0.1")
只是对mysql,pgsql有效,在oracle就不行。需要这样来写。
db = web.database(dbn='oracle', db='127.0.0.1/ORCL', user='system', pw='Mz123456')
2.oracle和pgsql数据库,字段名大小写的问题。
一样的create table todo (id...,title...),在webpy的程序中,oracle字段名不知为什么只能用大写,
用小写会出错,提示id或title字段找不到,必须是ID,TITLE字段。需要修改模板index.html和model.py
在使用pgsql数据库时,又出现相反的情况。不能用大写,要小写,改回来吧。奇了怪了!
3.字符集问题
乱码问题一直让我很恐惧,不幸的事,它总是如影随形。
解决办法:
(1).加入下面三行
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
这三条,按网友的提示,解决编码转换的问题。
(2).在base.html模板文件中,加入
<META http-equiv=Content-Type content="text/html; charset=utf-8">
指令页面编码
(3).但oracle数据库中读出的记录仍然是一个?号,是乱码,根据以前写mod_python的经验,加入两条,
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
4.杂七杂八的路径问题
python code.py http://127.0.0.1:8080 正常,
到了apache+wsgi中,出现文件,模块找不到的问题。
添加下面一行,解决
sys.path.append('D:/wwwroot/webpy')
python code.py 启动web服务,http://127.0.0.1:8080 中,可以显示出错的信息。
apache+wsgi环境中,浏览器中,则出错的信息太少,查错需要打开error.log日志。
web.py官网给出了很多例子,非常好,但实际一试,才会发现,并不是拿来就可以用,需要读懂程序,需要有查错的本事。
走过了艰难的一段过程,希望后来的朋友少走弯路,在这里与大家分享一点小经验,祝大家新年快乐。
文件列表:
ware\cx_Oracle-5.1.2-10g.win32-py2.7.msi
\cx_Oracle-5.1.2-11g.win32-py2.7.msi
\mod_wsgi-win32-ap22py27-3.3.so
\psycopg2-2.4.5.win32-py2.7-pg9.1.3-release
两个todo list的例子:
webpy-todolist-oracle.zip
webpy-todolist-pgsql.zip
python 选择的是2.7.2版
cx_Oracle提供了两个,一个是针对oracle 10g,一个针对的11g。
psycopg2与之配对的是postgresql数据库,9.1以上版本。python 2.7版。
Apache2.2和Postgresql 9.2自己下载安装。
安装好cx_Oracle以后,还需要下载安装instantclient-basic。
Linux环境可以下载rpm包进行安装。
windows环境解压后,复制到C:\Python27\Lib\site-packages即可。
关于webpy应用的使用环境:
比如,在windows环境下,d:\wwwroot\webpy作为根目录。
可以用命令行 cmd, 然后切换到d盘,用cd命令进入到webpy目录。
然后python code.py
通常 http://127.0.0.1:8080即可使用。
使用apache+wsgi的话,将mod_wsgi.so(改名后)复制到apache的module目录,
然后,在httpd.conf配置文件最下面添加几行。
#以下为webpy添加的内容
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias / "D:/wwwroot/webpy/code.py"
Alias /static "D:/wwwroot/webpy/static/"
AddType text/html .py
<Directory "D:/wwwroot/webpy">
Order deny,allow
Allow from all
</Directory>
然后,重新启动apache服务,即可 http://127.0.0.1 使用。
两个例子中,有sql文件,可以用数据库终端软件运行,初始化建立todo这张表。
使用过程:
1.安装apache
2.python
3.安装数据库 pgsql,oracle
4.安装pscopg
5.cx_Oracle
6.instantclient-basic,
7.安装webpy python setup.py insall
8.配置apache的 httpd.conf文件
9.初始化数据库
10.打开浏览器使用
这两个例子可以逐个试验,code.py文件位于d:\wwwroot\webpy目录中。
如果在其它目录,需要修改程序中的这一行:
sys.path.append('D:/wwwroot/webpy')
还需要修改apache的httpd.conf配置。
再次祝大家新年快乐!
完整的例子及相关软件:
webpy-todolist-eg2.zip
(1.14 MB, 下载次数: 40)
|
|