web-dev-qa-db-ja.com

リクエストからjsonを取得flask

クライアントコード:

import requests
import json

url = 'http://127.0.0.1:5050/login'
user = "newUser"
password = "password"
headers = {'content-type': 'application/json'}
response = requests.post(url, data={"user": user,"pass": password}, headers = headers)

サーバーコード:

from flask import Flask, request, make_response

app = Flask(__name__)


@app.route('/login', methods=['GET','POST'])
def login():    
 if request.method == 'POST':

    username = request.form.get("user")
    password = request.form.get("pass")
    //more code
    return make_response("",200)

if __name__ == "__main__":
     app.run(Host = "127.0.0.1", port = 5050)

問題は、ユーザー名とパスワードが常にNoneであるということです。

私も使ってみました:

content = request.get_json(force = True) 
password = content['pass']

そして

request.form['user']

私が持っているコンテンツを印刷すると:<Request ' http://127.0.0.1:5050/login ' [POST]>なので、クライアントから送信されたjsonが見つかりません。

編集:

私はjson.dumpsを追加し、request.get_json()を使用しました、そしてそれはうまくいきました

6
lads

JSONではなく、フォームでエンコードされたデータを送信しています。 content-typeを設定するだけでは、リクエストはJSONにはなりません。使用する json= JSONデータを送信します。

response = requests.post(url, json={"user": user,"pass": password})

Flask内のデータを取得するには:

data = request.get_json()
15
Alex

あなたが投稿したのと同じコードを実行してみましたが、usernameの代わりにpasswordおよびNoneの値をフェッチできました。

enter image description here

2
Afaq

私の最初の推測では、リクエストでContent-Typeヘッダーを設定していないので、Flaskはデータを解析できる必要があることを理解していません。Content-Typeヘッダーを値application/jsonを確認し、必要な場所に到達できるかどうかを確認します。

もう1つの注意点は、ログインページにアクセスすると、ブラウザがContent-Typeヘッダーをapplication/x-www-form-urlencodedに設定し、データをuser=asdf&passwd=asdfとしてエンコードすることです。

1
Gerad Bottorff