蟒蛇。无法向简单的网站api提出请求。烧瓶和要求

时间:2017-04-02 13:19:37

标签: python flask socket.io flask-socketio

我正在尝试为我的网站创建简单的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中的消息速率,如果感兴趣的话。

2 个答案:

答案 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 -