加载中...

第九章 后端环境搭建:web.py的使用


前面都是前端的一些内容,但是要想做出一个能用的东西,始终是不能脱离后端的。因此这一节主要介绍如何使用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/ 安装python2.7.6这个版本。

之后按照 webpy 官网的说明,通过命令安装webpy:

  1. pip install web.py
  2. 或者
  3. easy_install web.py
  4. 注意:linux下非root用户需要sudo

9.3 来一个Helloworld

安装好之后,直接把webpy网站上的那段代码,贴到的用编辑器打开的文件中,保存为server.py。webpy网站代码如下:

  1. import web
  2. urls = (
  3. '/', 'index'
  4. )
  5. app = web.application(urls, globals())
  6. class index:
  7. def GET(self):
  8. return 'Hello, World!'
  9. if __name__ == "__main__":
  10. app.run()

然后在server.py的同目录下执行:

  1. python server.py

之后命令行会输出:

  1. http://0.0.0.0:8080/

这个提示,现在你在浏览器访问 http://127.0.0.1:8080 ,就会看到熟悉的helloworld,是不是超级简单。

.4 简单构建api接口

在上面代码的基础上,按照前面backboneModel的定义,我们需要一个todo这模型的对应的链接,这个链接应该返回json格式的数据。并且能够支持post、put、get、delete这四个请求。现在来看接口部分的代码:

  1. #添加todo相关的urls
  2. urls = (
  3. '/', 'index', #返回首页
  4. # 处理前端todo的请求,操作对应的todo
  5. '/todo/(\d+)/', 'todo',
  6. # 处理前端todo的整体请求,主要是获取所有的todo数据
  7. '/todo/', 'todos',
  8. )
  1. #添加接口的处理代码
  2. class todo:
  3. def GET(self, todo_id=None):
  4. context = {
  5. "title": "下午3点,coding",
  6. "order": 0,
  7. "done": False,
  8. }
  9. return json.dumps(context)
  10. #处理整体的请求
  11. class todos:
  12. def GET(self):
  13. result = []
  14. result.append({
  15. "title": "下午3点,coding",
  16. "order": 0,
  17. "done": False,
  18. })
  19. return json.dumps(result)

添加完这部分代码之后,启动server.py。访问 http://localhost:8080/todo/ 就能看到数据了,这里只是实现了get方法,其他的方法在下一篇中介绍。

9.5 加入数据库sqlite

关于数据存储部分,我们使用sqlite数据库。sqlite的好处就是不需要安装即可使用。这样可以省去在数据库安装方面的折腾。

sqlite的介绍就不多说了,感兴趣的同学想必已经在查sqlite相关的东西了。这里只是演示在webpy中如何操作sqlite。

具体依然看代码:

  1. #使用sqlite3操作数据库
  2. import sqlite3
  3. conn = sqlite3.connect('todos.db')
  4. #把todo改为这样:
  5. class todo:
  6. def GET(self, todo_id=None):
  7. cur = conn.cursor()
  8. cur.execute(sql_query + ' where id=?', (todo_id, ))
  9. todo = cur.fetchone()
  10. cur.close()
  11. # 先用这种比较傻的方式
  12. context = {
  13. "id": todo[0],
  14. "title": todo[1],
  15. "order": todo[2],
  16. "done": todo[3],
  17. }
  18. return json.dumps(context)
  19. class todos:
  20. def GET(self):
  21. result = []
  22. cur = conn.cursor()
  23. cur.execute(sql_query)
  24. todos = cur.fetchall()
  25. cur.close()
  26. for todo in todos:
  27. result.append({
  28. "id": todo[0],
  29. "title": todo[1],
  30. "order": todo[2],
  31. "done": todo[3],
  32. })
  33. return json.dumps(result)

完整代码可以在 code 文件夹找到。使用时,先运行init_sqlite.py这个文件,会帮你创建一个sqlite的数据库,并且插入一条数据,然后运行server.py就可以在浏览器访问 http://localhost:8080/todo/ 或者http://localhost:8080/todo/1/ 看到输出数据了。

9.6 总结

这里打算用webpy+sqlite来完成后台主要是想到这个东西比Django+Mysql那一套搭建起来比较容易。有兴趣看Django后台搭建的可以看这篇文章: django开发环境搭建及使用 。

这里没有使用webpy自带的db模块进行数据的操作,主要是文档和案例都不全,并且源码看起来挺绕。用Python自带的模块显然操作起来有点笨拙,之后会对这个数据操作部分进行简单的封装。


还没有评论.