Python 在服务器端使用Flask Restful(REST Api)实现web套接字功能
完成的工作:我使用Flask Restful实现了一个带有Mongo DB(PyMongo驱动程序)的REST API,其中一个端点名为“用户”,由GET、POST、PUT、DELETE组成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
我的卖出方法:
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语句呢。