[新手开源] 使用 Tornado 搭建 RESTful 接口服务

2016-01-21 01:18:01 +08:00
 nekocode

作为一个「人生苦短,我用 Python 」的程序员,最近毅然决然地决定使用 Tornado 搭建一个社交应用的服务后端。现在在开发途中积累了很多不错的东西,打算分享给有这方面需求的人。

我在开发该社交应用(图片问答社区)中,使用了以下一些工具:
Tornado , MongoDB , Redis , Qiniu , MQTT

说实话, MongoDB 真的挺适合储存社交数据的,不过 Tornado 下真的缺乏一款好用的 MongoDB 的 ORM 框架, Motor Engine 还缺乏很多功能。不知道有没有大牛能够推荐一下。

另外就是目前在实现用户 Feeds 时有些停顿,目前仍在研究如何处理会好一些,也希望有经验的大牛能提供下好的意见。

去掉大部分的业务逻辑的壳,需要的拿去,也欢迎 Star , PR :
TornaREST . Github

11341 次点击
所在节点    Python
32 条回复
dai269619118
2016-01-21 09:31:25 +08:00
支持一下 有空了下载过来看下
nekocode
2016-01-21 09:56:36 +08:00
@dai269619118 谢谢支持~
tonghuashuai
2016-01-21 10:04:49 +08:00
MongoDB 的 ORM 我们用的 pymongo ,然后做了一点修改,使用起来完全无痛,非常顺手
nekocode
2016-01-21 10:10:21 +08:00
做的修改是让 pymongo 支持异步?

这里有一篇文章,是针对 tornado 下的 ORM 框架的对比测试,你可以看看:
http://www.cnblogs.com/restran/p/4937673.html
nekocode
2016-01-21 10:10:30 +08:00
withrock
2016-01-21 10:22:41 +08:00
刚好派上用场,请收下我的膝盖!
withrock
2016-01-21 10:24:55 +08:00
就是对你起的这个项目名称不太满意
tornado + rest = tornaRST ???
tonghuashuai
2016-01-21 10:33:14 +08:00
@nekocode
也没什么大修改,就是根据 model 名字自动设置 __collection__ 以及加了个迭代查询的方法
nekocode
2016-01-21 10:33:25 +08:00
@withrock
tornado 和 REST 是不同概念的东西,无法相提并论,所以我用的是 & 操作符,而不是 +。至于名称的话,不用太在意,随便起的而已 ✪ε✪
mapleray
2016-01-21 10:50:17 +08:00
弱弱问下,`user = yield User.objects.get(user_id)` 和 `schools = yield School.objects.find_all()` 这里用`yield` 的好处?没怎么看懂...
ethego
2016-01-21 11:06:30 +08:00
用 gevent 另外包一个线程或者开一个线程池代理 pymongo , tornado 的数据库请求全往这里发,应该可以解决阻塞的问题。
phithon
2016-01-21 11:18:28 +08:00
并没有用 orm ,好像没见过有异步的 orm ?求推荐, mysql/mongo
ethego
2016-01-21 11:28:35 +08:00
@phithon 没必要,异步也是在 orm 外部做, orm 不是干这个的。
strahe
2016-01-21 11:44:25 +08:00
一直用 pymongo , mongodb 原生的操作更爽,你只是需要稍微适应一下
cloudzhou
2016-01-21 11:52:39 +08:00
我想问一下 mqtt 用在哪里?
nekocode
2016-01-21 13:03:08 +08:00
@mapleray
这是利用 yield 关键字来实现异步操作,具体实现要看 tornado 的 gen 装饰器。


@phithon
@strahe
我之前在使用 MySQL 的时候,一直用的是 torndb ,也并非 ORM 库。


@cloudzhou
MQTT 用在实现消息推送上, MQTT 比起其他协议(例如 XMPP )简单高效多了。
ericls
2016-01-21 13:09:29 +08:00
motor 在 aiohttp 下还是很不错哒感觉
nekocode
2016-01-21 18:03:59 +08:00
@ericls 异步实现上,好像也就 motor 靠谱些了
latyas
2016-01-21 18:10:07 +08:00
ThreadPool + pymongo 保证没坑
用 motor 的话还是悠着点好
phithon
2016-01-21 18:32:51 +08:00
@ethego
我知道 orm 不是干这个的,但具体怎么实现『在外部做』,求指导?
有封装了的可以直接用的么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/252245

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX