我正在尝试为我的网站创建简单的API。我创建了带烧瓶的路线:
@api.route('/api/rate&message_id=<message_id>&performer=<performer_login>', methods=['POST'])
def api_rate_msg(message_id, performer_login):
print("RATE API ", message_id, ' ', performer_id)
return 400
print(...)
功能不执行...
我使用flask-socketio
在客户端和服务器之间进行通信
我从客户端发送json并处理它:
@socket.on('rate')
def handle_rate(data):
print(data)
payload = {'message_id':data['message_id'], 'performer':data['performer']}
r = requests.post('/api/rate', params=payload)
print (r.status_code)
注意,data
变量是从客户端发送的并且是正确的(我已经检查过了)。
print(r.status_code)
也不要执行... ...
我哪里错了?
对不起,我的英文不好:(
这个api函数必须增加存储在mongodb中的消息速率,如果感兴趣的话。
答案 0 :(得分:0)
从api路线中删除以下部分
&message_id=<message_id>&performer=<performer_login
POST请求中不需要这样做。它有助于GET请求。请求中的API调用与路由定义不匹配,因此您有当前的问题
答案 1 :(得分:0)
不要将&message_id=<message_id>&performer=<performer_login>
放入路线字符串中。相反,从request.args
获取这些参数。
试一试:
from flask import request
...
@api.route('/api/rate', methods=['POST'])
def api_rate_msg():
print(request.args)
return ''
我用httpie:
测试了它$ http -v POST :5000/api/rate message_id==123 performer_login==foo
POST /api/rate?message_id=123&performer_login=foo HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: localhost:5000
User-Agent: HTTPie/0.9.8
HTTP/1.0 200 OK
Content-Length: 0
Content-Type: text/html; charset=utf-8
Date: Sun, 02 Apr 2017 13:54:40 GMT
Server: Werkzeug/0.11.11 Python/2.7.13
从烧瓶的日志开始:
ImmutableMultiDict([('message_id', u'123'), ('performer_login', u'foo')])
127.0.0.1 - - [02/Apr/2017 22:54:40] "POST /api/rate?message_id=123&performer_login=foo HTTP/1.1" 200 -