2017-09-06 1 views
0

Alors que sur localhost, j'ai téléchargé Flask-Cors. J'ai essayé d'envoyer quelques requêtes pour flasher le serveur car le code sous le code entier est sur github.Pourquoi ma requête API retourne-t-elle des valeurs vides pour chaque argument POST?

Malheureusement, je ne peux pas obtenir de données en utilisant la requête POST.

Voici mon code 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) 

Le reste du code est à Github

Voici mon point de terminaison Flask pour l'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) 

Le reste de ce code est également at this link.

Répondre

1

Il semble que votre serveur s'attend à ce que le corps du POST soit au format key=val multiple, plutôt qu'en format JSON. Vous pouvez utiliser multipartBody pour y parvenir:

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

Je veux juste ajouter que si vous pouvez adresser une demande à l'adresse ip 0.0.0.0 ce n'est pas l'adresse de votre application de flacon est à l'écoute. 0.0.0.0 signifie que l'application flask écoute toutes les adresses IP disponibles (ce qui n'inclut pas 0.0.0.0 car elle est réservée à cet effet). Votre application flacon peut être atteint sur 127.0.0.1 et localhost.