作者:JueDream
来源:http://blog.csdn.net/qq_35731570/article/details/62221021?locationNum=2&fps=1
这篇文章主要讲述的是在Windows下,在eclipse中如何通过使用webpy框架进行python的web开发。很多文章都是在自己一次次的碰壁中又决定自己写一篇。像原来的MySQL的安装,每次安装都是需要重新再搜索一遍遇到的问题如何解决。
本文分几个部分:
第一个部分是python的安装,如果安装过了的童鞋,则可以直接跳过去这一步;
第二部分是eclipse中PyDev插件的安装,安装之后在eclipse中就可以进行python的开发;
第三个部分是webpy的安装;
第四部分是MySQLdb的安装;
第五部分是sqlalchemy的安装;
最后则是代码示例。
在Windows下无论安装什么都是比较麻烦的,同样包括Python。在Windows下安装python可以去python官网下载,在这里有一个下载版本的问题。现在可以分为两个大版本,即3.X之前和3.X之后。如果单纯是做python的开发(不会依赖其他第三方库),当然是选择3.x之后的版本。因为python的升级是不可阻挡的趋势,还不如早早选择新版本,省的以后再版本更换的时候出现额外的精力;但是如果是要和其他框架又耦合,那么建议是选择3.x之前的版本。在整个框架搭建过程中不致一次的出现因为版本不兼容导致莫名奇妙的问题出现,花费很长的时间去定位。比如开始python开始是3.4最新版本,但是webpy依赖的是python2.7的版本,无法正常安装(因为3.4和2.7之间有些语法不同)。
下载完之后就可以直接单击安装,选择安装目录就好。在这里需要注意的是安装完建议修改一下系统变量,这样以后可以在cmd里直接运行python命令就可以了,而不是每次都需要cd到存在python.exe的目录下再运行。除此之外,在安装其他第三方库的时候,比如webpy中会省去不少麻烦。除了上面直接下载可执行文件的方式安装之外,你还可以通过源码的方式安装,源码方式的安装可以通过--prefixe=filepath来指定安装路径。
修改系统路径办法:我的电脑->右键“属性”->选择“高级系统设置”->选择“环境变量”->选择“系统变量”->单击Path属性,把python.exe目录添加进去。如下图所示:
修改后的Path:C:\Program Files (x86)\Common Files\NetSarang;C:\Python27(注意每个路径之间使用分号隔开)
安装之后运行cmd,然后直接输入python进入python输入命令模式:
当python安装完成之后,还需要eclipse支持python的开发。这时候需要eclipse中添加pydev的插件。打开eclipse然后具体步骤如下:
help->install new software->在弹出的窗口中单击add->在弹出的窗口中输入下面截图内容
单击OK等待加载出的内容,在加载出的内容中选择pydev安装包,然后点击next开始安装,安装过程中询问关于权限相关内容直接选择同意。安装成功之后,eclipse选择重启。重启之后可以在Window->preference中看到PyDev的选项,下一步的工作就是为PyDev选择python解释器。在eclipse中安装解释器的步骤如下:
Window->preference->PyDev->Interpreters->Python Intepreter,具体如下图所示:
在出现的窗口中单击new,在弹出的窗口中选择你安装python的目录中含有python.exe目录,单击OK则开始加载python下的包。如下图所示:
这个时候,eclipse就可以进行python的开发了。其实上述不要忘记python interpreter的设置,其他正常情况下都不会出现问题的。经过上述步骤之后,在eclipse中新建项目就可以看到PyDev Project选项。按照正常的新建源代码,以python的方式运行,整个过程结束。
webpy是一个小型的以python开发的基于MTC(Model-Templates-Control)方式开发的一个框架,相比较与Django,它体积是非常小。在功能上没有Django强大。webpy可以与apache一起结合使用,提高其性能,详情可以查看webpy与apache的设置。
安装webpy可以去webpy官网下载,下载下来直接解压到某个目录即可。在这里选择解压到python安装目录下面,解压后的webpy的目录如下图所示:
然后通过python setup.py install安装。一般python中安装第三方库都是通过setup.py安装,或者easy_install等方式。不同方式也没有无所谓的优劣之分,纯碎是个人习惯和环境了。
在安装的时候,有可能会报出如下错误 import error model utils not exist等类似错误。具体错误原因是因为上述命令会执行web文件夹下的__init__.py文件,其源码文件如下所示:
可以看住该文件会加载标准库和web文件夹下的各种py文件执行一遍生成pyc文件以便以后可以主动执行。但是__init__.py在加载其他文件的时候,因为其他文件的不在当前python的目录下,可以通过import sys,然后打印sys.path,看一下当前python目录。解决办法是把当前的位置添加进sys.path,即在__init__.py源码文件中添加下面一句代码:
sys.path.append(yourpath)#yourpath则是你webpy所在的目录。
添加完这两句代码再次执行,就可以安装成功了。如果不添加上面的代码,你也可以通过修改Path路径在完成安装的。另外,如果上面你安装了python而且也修改了Path路径,那么这个问题就不会出现。
web开发中数据库是不可缺少的,对于MySQL来说,python有MySQLdb的支持。MySQLdb是python与mysql之间进行连接的一个库,就像Java与其他数据库直接使用JDBC一样。MySQLdb可以直接通过下载msi格式的安装包直接安装,下载地址:http://sourceforge.net/projects/mysql-python/
在使用安装包安装的时候需要注意,你这个时候必须设定了Path路径,否则安装包在安装的时候是无法找到python的执行路径的。因为是编译好的安装包,你又无法修改源代码,所以是无法安装成功的。除此之外需要注意的是python与MySQLdb之间的版本问题也需要一个同意。这是我搭建整个架构的时候遇到的第二个版本的问题。这里出现的版本问题是“你安装的python或者MySQLdb是面向32位机器还是64位”。因为MySQLdb只有2.7的版本。python与MySQLdb在机器位数选择必须统一,否则在使用的时候就会报出如下错误:python ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
除此之外,这里应该不会出现什么错误。我就是下载了之后直接点击安装就可以了。
如果是在linux下进行安装,有可能会报出mysql_config can't find的错误。这因为你没有安装libmysqlclient-dev的库,安装好之后去修改site.cfg下的mysql_config的路径,然后就可以了。
在这里你会发现,很多时候一个框架你不是不会搭建,而是搭建好之后报出的莫名奇妙的错误让人抓狂,而这些莫名奇妙的错误大部分都是因为版本之间不兼容。
sqlalchemy是一个ORM框架,它提供了ORM应该提供的功能。在JAVA WEB开发中习惯了使用ORM框架,直接使用MySQLdb和数据库交互不是很习惯,所以又选择安装了这个框架。sqlalchemy下载地址是http://www.sqlalchemy.org/。它是对python2和python3都进行了支持,还是很强大的。下载下来解压,安装找个和上面安装webpy没什么两样,依次走完每个过程就好。
这时候也发现了python开发中需要安装很多东西,在一个环境下安装了,换了环境你还要安装。我平时是在Windows下开发,需要安装一套。线上的环境是在linux上,尼玛还要安装一套。搜索了一下,在python中也没找到像maven,ant等类似的工具。
上面这么多过程还只是框架的搭建,一行代码还没写已经耗费了好久了。下面就给出部分的代码示例。
简单示例
具体例子贴出官网首页给出的简单示例:
运行上述代码,默认监听的是8080端口。然后浏览器上输入localhost:8080,就可以看到网页上输出Hello world。你第一个webpy项目就这样成功了。
webpy中form表单
web开发中不可避免的就是表单的提交,在webpy中也提供了表单的强大支持,通过后端代码的定义结合模版,让表单可以轻松完成。详细教程请查看官网连接-form表单使用
在开发的过程中在你的模版定义中需要注意的是$def with form这句代码一定要位于第一行第一列,否则就会报出syntax invalid的错误,具体示例如下:
需要注意的一点是,在接受前端数据的后端的post方法顶一个中,你必须首先调用form的validatest方法,否则的话,你就无法或得到前端传递过来的数据。
个人项目
下面就是我整个项目的代码架构:
该项目主要功能的是注册,登录。其中注册部分使用的是webpy的form模块,数据库层使用的orm框架sqlalchemy。通过DAOLayer把数据库接口层封装起来,对外提供友好接口;utils封装了常用的接口;Const负责读取数据库的配置信息。主要代码结构就是上述。
其中需要注意的是存放css/js的static文件夹,必须和启动类同一个层次目录,另外就是文件名必须为static,略蛋疼。
安装整个过程遇到的问题挺多,但是回头去看看,大部分是自己疏忽,部分问题是不了解导致比如版本问题,还有部分是对框架的使用不熟悉导致。下面就列出一些问题
版本问题主要出现在python与webpy、python与MySQLdb两部分。
webpy不熟悉导致中form表单生成问题,代码示例中已经给出提示
读取配置文件的时候无法直接读取json或者dict格式,解决办法是参考了SO上的回答
sqlalchemy不熟悉导致插入数据之后,数据库无数据的问题,原因是add之后没有commit
form表单的生成一直异常,这个已经在上文中说明。生成语句必须在html中第一行表示
登录成功之后跳转失败,这是url之间的相对路径没搞好
页面之间的数据传值问题
补充一下linux中的安装:
开发系统需要移植到linux中,噩梦开始了。在安装中首先是MySQLdb安装,通过setup.py去安装,一直出现ImportError: No module named setuptools.初始理解是setuptools模块没有安装,但是安装其他模块的时候可以使用python setup.py安装的啊。继续google,看到有篇文章提到权限、sudo两个关键词。我擦。瞬间明了了,是不是权限不够。因为安装其他模块的时候,也提示权限不够,后来使用sudo搞定的。试了一下,尼玛果真是权限不够。你这安装错误提示也太尼玛操蛋了吧。
权限问题解决,但是出现另一个错误EnvironmentError: mysql_config not found。google了一下,一种说法是没有安装msyql的client还有connector,但是我保证是安装了啊;另一种说法是MySQLdb的配置文件中没有指示正确mysql_config路径,去看了下MySQLdb的安装时候读取的配置文件site.cfg,果真看到配置是一个默认被注释掉的选项,但是我mysql_config不是处在默认位置,修改了该配置选项指向我系统所在的位置,安装成功。
sqlalchemy安装好之后在启动的时候报:
sqlalchemy.exc.OperationalError: (OperationalError) (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)") None None
该错误就是在说sqlalchemy在连接mysql的时候在固定位置找不到mysql的socket的文件。所以就通过如下几种方式去查看
1:首先看mysql是否启动,没启动肯定就不会有socket的文件
2:启动之后看了mysql的配置文件发现,它是采用的默认配置,是把socket配置到tmp目录下了
3:查看如何更改sqlalchemy寻找mysql的启动文件socket的位置,结果就是修改了如下:
"mysql+mysqldb://" + Const.USERNAME + ":" + Const.PASSWD + "@" + Const.HOST + "/" + Const.DBNAME + "?charset=utf8&use_unicode=0&unix_socket=/tmp/mysql.sock"
同理,在MySQLdb连接的时候也需要修改socket配置