在服务器端使用Flask Restful(REST-Api)实现web套接字功能



工作完成:我已经用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请求的方法而构建的。

想象一下

  1. 用户单击按钮
  2. 您的框架接受请求
  3. 满足需求
  4. 并最终返回响应

这是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/

相关内容

  • 没有找到相关文章

最新更新