最近内部需要实现一个新的HTTP REST服务,数据用JSON。打算用Python来做一个原型,用于比较和Java实现方案的具体差异,以前也没有Python实战经验,所以摸索过程如下。

首先定义协议,假定我们要实现一个群组成员管理的服务

添加成员:

POST http://server/group-user/

users=[1,2,3…]

删除成员:

DELETE http://server/group-user/

users=[1,2,3…]

获取成员:

GET http://server/group-user/

评估了几个python web框架之后,包括django, selector, CherryPy等。

Django安装和看了一些文档之后觉得它类似ruby on rails, 是一个快速的MVC/ORM的框架,相对于一个轻量级的REST服务来说不太适合。

selector文档太少,使用也感觉比较繁琐。

网上相关的讨论也比较少,可能目前REST方式还没大规模应用。正在比较迷茫的时候,看到了web.py的介绍,试用了一下之后,发现是碰到最适合目前需求的,使用也最简单。POST,GET,DELETE,PUT只需要在相应的function实现即可。另外还带了db,form,http等常用的web应用所需的类。

主要源代码:

class group_user:

def __init__(self):

pass

def GET(self, gid):

db = web.database(dbn='mysql', user='user', pw='pass', db='db', host="localhost")

users = db.query('SELECT * FROM groupuser WHERE groupid=$gid', \

vars={'gid':gid})

output = StringIO.StringIO()

output.write("[")

count = 0

for u in users:

if count > 0:

output.write(',')

output.write('["uid":%d,"nickname":%s]' % \

(u['uid'], json.dumps(u['nick'], True, False))

count += 1

output.write("]")

str = output.getvalue()

return str

def POST(self, gid):

data = web.data()

result = urlparse.parse_qs(data)

uid = result['uid'][0]

add_count = 0

list = json.loads(result['users'][0])

for u in list:

add_count += self.add_user(gid, u[0])

return add_count

def DELETE(self, gid):

data = web.data()

result = urlparse.parse_qs(data)

uid = result['uid'][0]

del_count = 0

list = json.loads(result['users'][0])

for u in list:

uid = u[0]

self.del_user(uid)

del_count += 1

return del_coun

几点感想:

原型所需要的功能很精简,开发效率比Java稍快,Java的代码长度可能会是这个1-2倍之间,但是针对这种纯业务逻辑的代码,Python的优势也不是非常明显,一个熟练的Java程序员可以很快完成这个功能。

性能。测试环境下每秒只能执行40-50次,如果用Java实现的话可以轻松上千次。如果性能问题不能调优,可能Python实现的这个功能也只能用来验证原型,没法用在生产环境。

数据库连接是每个function内部都执行一次连接,从Java的角度来看比较低效。

Python 2.6之上自带JSON支持,无须另外寻找JSON库,比较方便。

Python Web框架通过一个WSGI的规范来定义,类似Java的Servlet的规范。

Python的代码强制嵌入的方式看起来比Java更优雅,除了class function定义中要带一个self参数比较怪异。

python作者_Python相关推荐

  1. python画代码-Python教程_Python画Mandelbrot集 代码

    Python教程_Python画Mandelbrot集 代码 作者:Comet 来源: 课课家 www.kokojia.com点击数:278发布时间:2015-06-19 11:17:19 曼德勃罗集 ...

  2. python编程语言_python编程语言的简要历史

    python编程语言 The Python programming language is a general-purpose programming language that has carved ...

  3. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  4. 2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?

    2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?编程界的王者是渐落寞的Java还是大火的Python? 是不是你们也喜 ...

  5. python作者龟叔_Python基础 — Python简介

    序言:未来是数据的世界,而python 是一门可以高效简洁处理数据的语言,博主打算花一些时间完成python学习的从0到1.以此相关系列博客作为一个记录. 1. Python简介 Python的发音与 ...

  6. python作者怎么读_python 读键盘

    <树莓派Python编程入门与实战(第2版)>--3.3 安装Python和工具 本节书摘来自异步社区<树莓派Python编程入门与实战(第2版)>一书中的第3章,第3.3节, ...

  7. 手机写python脚本_python可以写手机脚本么作者老田

    如若想在程序中自动建立关联,则须用上API函数,--这个不是本文的主题了class JdbcUtils {for (int i=0; i < size; i++) {应用程序在启动和运行时需要将 ...

  8. python分句_Python循环中的分句,继续和其他子句

    python分句 Python中的循环 (Loops in Python) for loop for循环 while loop while循环 Let's learn how to use contr ...

  9. python语音识别_Python中的语音识别-完整的入门指南

    python语音识别 Welcome to The Complete Beginner's Guide to Speech Recognition in Python. 欢迎使用Python语音识别完 ...

  10. python可视化_python商业智能可视化

    python可视化 Why are visualizations worth thousands of words? They have the power of telling stories an ...

最新文章

  1. 覆盖半透明黑色CSS,通常用于弹窗提示、弹窗显示大图等情况的背景图层
  2. 解读生命密码的基本手段 ——DNA测序技术的前世今生
  3. mysql多实例配置使用方法
  4. 用faster-rcnn训练自己的数据集(VOC2007格式,python版)
  5. camunda流程定义表无数据_BPM - 业务流程管理
  6. 单继承-问题的抛出-单纯封装可能会出现重复的代码
  7. 当重复调用addsubview时出现显示重叠问题
  8. 电子商务概论(农)之章节课后题
  9. linux tcp调优
  10. Devoxx法国2012天3
  11. 转 Android屏幕适配全攻略(最权威的官方适配指导)
  12. python卡方检验关键词,Python卡方检验
  13. 高通平台 pmic—gpio修改(2)
  14. 10Bootstrap5徽章
  15. 利用google or-tools 求解逻辑难题:斑马问题
  16. 20个数据分析师必会的营销模型,赶紧收藏
  17. App Zap的非常货币化策略:付费游戏的应用内购买
  18. Linux(ECS云服务器)
  19. Xcode发布测试版本,直接通过Safari在线安装ipa
  20. 如果老板跟你说“爱干就干,不爱干就滚蛋”,你会怎么办?

热门文章

  1. Kubernetes集群的安装部署
  2. SpringBoot学习(第一天)
  3. Interactive Data Display如何显示菜单?
  4. 多线程并发编程之构建自定义同步工具
  5. Python学习-9.Python函数定义
  6. 页面删除android4.0 Launcher仿三星平板workspace页面编辑(即页面增减)
  7. [生活]我短暂的股票生涯
  8. 创建型模式专题总结:Creational Pattern(转自Terrylee)
  9. Python的psutil模块监控内存代码
  10. MFC字符串CString分割函数 简洁 C++