2017-09-06 83 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联系您的烧瓶应用程序。

相关问题