【问题标题】:Why does my API request returns empty values on each POST arguments?为什么我的 API 请求在每个 POST 参数上都返回空值?
【发布时间】:2017-09-06 14:34:19
【问题描述】:

在本地主机上,我已经下载了 Flask-Cors。我尝试向烧瓶服务器发送几个请求,因为整个代码下方的代码位于 github 上。

不幸的是,我无法使用 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

这是我的 Flask 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

【问题讨论】:

    标签: python api flask elm flask-restful


    【解决方案1】:

    我只想补充一点,尽管您可以将请求定向到 IP 地址0.0.0.0,但这不是您的烧瓶应用程序正在侦听的地址。 0.0.0.0 表示烧瓶应用程序正在侦听所有可用的 IP 地址(不包括 0.0.0.0,因为它是为此目的而保留的)。您可以通过 127.0.0.1localhost 访问您的烧瓶应用程序。

    【讨论】:

      【解决方案2】:

      您的服务器似乎希望 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
      

      【讨论】:

        猜你喜欢
        • 2021-12-04
        • 1970-01-01
        • 2019-02-14
        • 2020-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-20
        • 1970-01-01
        相关资源
        最近更新 更多