2017-09-06 104 views
0

在本地主機上,我已經下載了Flask-Cors。我嘗試向燒瓶服務器發送少量請求,因爲整個代碼下方的代碼位於github上。爲什麼我的API請求在每個POST參數上返回空值?

不幸的是我無法使用POST請求獲取任何數據。

這是我的ELM代碼。

module Update exposing (update) 
import Http 
import Json.Decode exposing (..) 

import Types exposing (..) 



update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case msg of Username str -> ({ model | loginUserName = str}, Cmd.none) 
       Password str -> ({ model | loginPassword = str}, Cmd.none) 
       Login -> (model, login model.loginUserName model.loginPassword) 
       LoginResult (Ok username) -> ({ model | user = LoggedInUser { userName = username}}, 
               Cmd.none) 
       LoginResult (Err _) -> (model, Cmd.none) 
       Logout -> (model, Cmd.none) 


login : String -> String -> Cmd Msg 
login username password = 
    let url = "http://0.0.0.0:8080/api/user/login" 
     request = Http.get url decodeLogin 
    in Http.send LoginResult request 


decodeLogin: Decoder String 
decodeLogin = at ["username"] string 

-- Or 
--decodeLogin : Decoder String 
--decodeLogin = decodeString (field "username" string) 

代碼的其餘部分是在Github

這裏是我的API

@app.route("/api/user/login/", methods=["GET", "POST"]) 
def login(*args, **kwargs): 
    print 'Got request for login' 
    print args 
    print kwargs 
    print request.args 
    print request.args.get("username") 
    print request.values.get("username") 
    print request.method 
    print request.form['username'] 

    response = {'username': 'Erik'} 

    dict = request.args 
    for key in dict: 
     print 'form key ' + dict[key] 

    return jsonify(response) 

這個代碼的其餘部分也at this link瓶端點。

回答

1

看起來您的服務器期望POST主體採用多個key=val格式,而不是JSON格式。您可以使用multipartBody來實現這一目標:

import Http exposing (..) 

login : String -> String -> Cmd Msg 
login username password = 
    let url = "http://0.0.0.0:8080/api/user/login" 
     body = 
      multipartBody 
       [ stringPart "username" username 
       , stringPart "password" password 
       ] 
     request = Http.post url body decodeLogin 
    in Http.send LoginResult request 
2

我只想補充一點,雖然你可以在IP地址0.0.0.0直接的請求,這是不是你的瓶的應用正在監聽的地址。 0.0.0.0表示燒瓶應用程序正在監聽所有可用的IP地址(因爲它是爲此目的而保留的,所以不包括0.0.0.0)。您可以通過127.0.0.1localhost聯繫您的燒瓶應用程序。

相關問題