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

Python 在服务器端使用Flask Restful(REST Api)实现web套接字功能,python,rest,flask,websocket,flask-restful,Python,Rest,Flask,Websocket,Flask Restful,完成的工作:我使用Flask Restful实现了一个带有Mongo DB(PyMongo驱动程序)的REST API,其中一个端点名为“用户”,由GET、POST、PUT、DELETE组成 我的卖出方法: def put(self,简称): coll=db.users user_info=request.get_json() 打印用户信息以进行调试 coll.update({'short\u name':short\u name'},{“$set”:user\u info}) 返回响应(jso

完成的工作:我使用Flask Restful实现了一个带有Mongo DB(PyMongo驱动程序)的REST API,其中一个端点名为“用户”,由GET、POST、PUT、DELETE组成
我的卖出方法:
def put(self,简称):
coll=db.users
user_info=request.get_json()
打印用户信息以进行调试
coll.update({'short\u name':short\u name'},{“$set”:user\u info})
返回响应(json_util.dumps(用户信息),mimetype='application/json')

上面的PUT方法接受一个简短的_名称,更新用户数据库并返回响应

要做的工作:我需要实现一个服务器端web套接字功能,在
coll.update({'short\u name':short\u name},{“$set”:user\u 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+名称空间)

socket.on('my response', function(msg) {
            console.log(msg.data)
        });

现在,当我运行应用程序时,客户端的控制台不会打印从服务器发送的数据。谁能解释一下我哪里出了问题。

这应该很有趣。。。Flask或Django或类似的框架是为基于HTTP请求的方法而构建的

想象一下

  • 用户点击按钮
  • 你的框架接受了这个请求
  • 满足需求吗
  • 最后返回响应
  • 这是web服务器的实际流程。但在您的情况下,您可能希望在DB更新或任何事件更改时更新前端。。在这种情况下,您需要套接字与前端通信

    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']})
    

    就像这个导入一样,发出并放置您的消息,您就可以开始了。有关更多详细信息,请参见此处。。。与前端通信忘记RESTAPI。检查插座。你最好的朋友是…@RajaSimon谢谢你的提醒。但是,您能否更详细地阐述一下“与前端通信,忘记RESTAPI”这一有点困惑的问题。我不知道在服务器端应该将代码附加到哪里。那么我的put方法的return语句呢。