工作完成:我已经用Mongo DB(PyMongo驱动程序)实现了一个REST API,使用Flask-Restful,它有一个名为"用户"的端点,由GET、POST、PUT、DELETE组成
我的PUT方法:def put(self, short_name ):
coll = db.users
user_info = request.get_json()
print user_info #for debugging
coll.update({'short_name': short_name'}, {"$set": user _info})
return Response(json_util.dumps(user _info), mimetype='application/json')
上面的PUT方法接受一个short_name,更新User数据库并返回一个响应。
要做的工作:我需要实现服务器端web套接字功能,在执行coll.update({'short_name': short_name'}, {"$set": user _info})
后,必须向客户端(即完全基于angular构建的前端)发送一条消息,说明"数据更新成功"。
我在网上看到了一些片段,但找不到RESTApi。目前,我只需要服务器端实现。稍后我将尝试弄清楚客户端的实现。感谢您对如何实现这一目标的任何帮助。它可以用简单的python完成吗?还是需要socket.io。欢迎所有解决方案。
编辑:我修改的服务器代码
def put(self, short_name ):
coll = db.users
user_info = request.get_json()
print user_info #for debugging
coll.update({'short_name': short_name'}, {"$set": user _info})
emit('my response', {'data': 'update successful'})
return Response(json_util.dumps(user _info), mimetype='application/json')
在客户端添加了以下内容:namespace = '/';
var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);
socket.on('my response', function(msg) {
console.log(msg.data)
});
现在,当我运行应用程序时,客户端的控制台不会打印从服务器发送的数据。有人能解释我哪里错了吗。
这应该很有趣。。。Flask或Django或类似的框架是为基于HTTP请求的方法而构建的。
想象一下
- 用户单击按钮
- 您的框架接受请求
- 满足需求
- 并最终返回响应
这是web服务器的实际流程。但在您的情况下,您可能希望在DB更新或任何事件更改时更新前端。。在这种情况下,您需要Socket与前端进行通信。
web套接字的功能
- 随时与您的网站沟通
只需将javascript放在html页面中,如所示
$(document).ready(function(){
var socket = io.connect('http://localhost:8000/test');
});
现在你已经连接到了网站,所以接下来在你的python代码中。。
@socketio.on('my event', namespace='/test')
def test_message(message):
emit('my response', {'data': message['data']})
就像这个导入一样,发送并放置你的消息,你就可以开始了。有关更多详细信息,请查看此处http://flask-socketio.readthedocs.org/en/latest/