2017-09-06 11 views
0

localhost上に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

であるこのコードの残りの部分もat this linkある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) 

のための私のフラスコエンドポイントです。

答えて

1

POSTの本体がJSONではなく複数のkey=val形式であるとサーバーが想定しているようです。私はちょうどあなたがIPアドレス0.0.0.0の要求を指示することができますけれども、これはあなたのフラスコアプリがリッスンしているアドレスではないことを追加したい

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

:あなたはこれを達成するためにmultipartBodyを使用することができます。 0.0.0.0は、利用可能なすべてのIPアドレス(この目的のために予約されているので、0.0.0.0は含まれません)でフラスコアプリがリッスンしていることを示します。あなたのフラスコのアプリは127.0.0.1localhostに届きます。

関連する問題