2017-04-02 120 views
0

我想爲我的網站創建簡單的API。我創建了瓶路線:Python。無法向簡單的網站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

不要把&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 - 
+0

嗯......但它對我不起作用(.api_rate_msg()中的代碼不起作用。 ,我的請求代碼有問題 –

+0

用httpie或curl測試你的api,這樣你就可以知道哪裏出了問題 – hallazzang

+0

嗯..你的服務器位於外部,而不是你的本地網絡? – hallazzang

0

從您的API路線刪除以下部分

&message_id=<message_id>&performer=<performer_login 

這是不需要在POST請求。它可以幫助GET請求。在請求API調用不匹配的路由定義,因此你有當前的問題

+0

我已經做到這一點,但仍沒有改變。 :( 另外,我在'handle_rate'中改變了'payload = ...'到'payload = {'message_id':data ['message_id'],'performer_login':data ['performer']}',但仍然沒有任何效果 –

+0

謝謝你的幫助,我不能評價你,因爲我的聲譽太低了 –