Python。无法向简单站点 api 发出请求。烧瓶和请求

Python. Cannot make a request to simple site api. Flask and requests

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

从您的 api 路线中删除以下部分

&message_id=<message_id>&performer=<performer_login

这在 POST 请求中不是必需的。它有助于 GET 请求。 API 调用请求与路由定义不匹配,因此您遇到了当前问题

不要将 &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

从 flask 的日志中:

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 -