前面都是前端的一些内容,但是要想做出一个能用的东西,始终是不能脱离后端的。因此这一节主要介绍如何使用python的一个web框架webpy。我想读我这个教程的同学大多都是前端,对后端没有什么感觉。因此关于后端的介绍以能用为主,不涉及太多的后端的东西。 ## 9.1 python是什么 简单来说Python和JavaScript一样,是一个动态语言,运行在服务器端。语法类似于程序伪码,或者说类似于自然语言。过多的语法和关键字就不再介绍。只需要记住Python是用缩进来判断语法块的,不像js用大括号。 ## 9.2 webpy是什么 和Backbonejs是js的一个框架一样,webpy是python的一个简单的web开发的框架。可以通过简单的几行代码启动一个web服务(虽然只是输出helloworld ^_^)。用它可以简单的满足咱们的开发需求。 因为是基于Python的框架,因此需要先安装Python环境,具体怎么装就不细说了,到[http://python.org/download/](http://python.org/download/) 安装python2.7.6这个版本。 之后按照 [webpy](http://webpy.org/) 官网的说明,通过命令安装webpy: ~~~ pip install web.py 或者 easy_install web.py 注意:linux下非root用户需要sudo ~~~ ## 9.3 来一个Helloworld 安装好之后,直接把webpy网站上的那段代码,贴到的用编辑器打开的文件中,保存为server.py。webpy网站代码如下: ~~~ import web urls = ( '/', 'index' ) app = web.application(urls, globals()) class index: def GET(self): return 'Hello, World!' if __name__ == "__main__": app.run() ~~~ 然后在server.py的同目录下执行: ~~~ python server.py ~~~ 之后命令行会输出: ~~~ http://0.0.0.0:8080/ ~~~ 这个提示,现在你在浏览器访问 [http://127.0.0.1:8080](http://127.0.0.1:8080/) ,就会看到熟悉的helloworld,是不是超级简单。 ## .4 简单构建api接口 在上面代码的基础上,按照前面backboneModel的定义,我们需要一个todo这模型的对应的链接,这个链接应该返回json格式的数据。并且能够支持post、put、get、delete这四个请求。现在来看接口部分的代码: ~~~ #添加todo相关的urls urls = ( '/', 'index', #返回首页 # 处理前端todo的请求,操作对应的todo '/todo/(\d+)/', 'todo', # 处理前端todo的整体请求,主要是获取所有的todo数据 '/todo/', 'todos', ) ~~~ ~~~ #添加接口的处理代码 class todo: def GET(self, todo_id=None): context = { "title": "下午3点,coding", "order": 0, "done": False, } return json.dumps(context) #处理整体的请求 class todos: def GET(self): result = [] result.append({ "title": "下午3点,coding", "order": 0, "done": False, }) return json.dumps(result) ~~~ 添加完这部分代码之后,启动server.py。访问 [http://localhost:8080/todo/](http://localhost:8080/todo/) 就能看到数据了,这里只是实现了get方法,其他的方法在下一篇中介绍。 ## 9.5 加入数据库sqlite 关于数据存储部分,我们使用sqlite数据库。sqlite的好处就是不需要安装即可使用。这样可以省去在数据库安装方面的折腾。 sqlite的介绍就不多说了,感兴趣的同学想必已经在查sqlite相关的东西了。这里只是演示在webpy中如何操作sqlite。 具体依然看代码: ~~~ #使用sqlite3操作数据库 import sqlite3 conn = sqlite3.connect('todos.db') #把todo改为这样: class todo: def GET(self, todo_id=None): cur = conn.cursor() cur.execute(sql_query + ' where id=?', (todo_id, )) todo = cur.fetchone() cur.close() # 先用这种比较傻的方式 context = { "id": todo[0], "title": todo[1], "order": todo[2], "done": todo[3], } return json.dumps(context) class todos: def GET(self): result = [] cur = conn.cursor() cur.execute(sql_query) todos = cur.fetchall() cur.close() for todo in todos: result.append({ "id": todo[0], "title": todo[1], "order": todo[2], "done": todo[3], }) return json.dumps(result) ~~~ 完整代码可以在 code 文件夹找到。使用时,先运行init_sqlite.py这个文件,会帮你创建一个sqlite的数据库,并且插入一条数据,然后运行server.py就可以在浏览器访问 [http://localhost:8080/todo/](http://localhost:8080/todo/) 或者http://localhost:8080/todo/1/ 看到输出数据了。 ## 9.6 总结 这里打算用webpy+sqlite来完成后台主要是想到这个东西比Django+Mysql那一套搭建起来比较容易。有兴趣看Django后台搭建的可以看这篇文章: [django开发环境搭建及使用](http://www.the5fire.com/10-django-dev-env.html) 。 这里没有使用webpy自带的db模块进行数据的操作,主要是文档和案例都不全,并且源码看起来挺绕。用Python自带的模块显然操作起来有点笨拙,之后会对这个数据操作部分进行简单的封装。