Для справки я рассмотрел эти три вопроса:
Возврат JSON ответ от Flask просмотр
Отправка JSON и код состояния с ответом Flask
Вернуть объект requests.Response из Flask
Как указано в заголовке, я пытаюсь вернуть JSON ответ от метода flask post. Маршрут flask выглядит следующим образом:
@app.route('/login', methods=['POST'])
def login_route():
content = request.json
jwt = get_authorization(content['username'], content['password'])
return {'session-token': jwt} , 200
Где в моем веб-приложении я хотел бы сохранить session-token
в файлах cookie (на данный момент).
В настоящее время на веб-стороне у меня есть следующий код:
static postWithJSONResponse(url, body, onFetchComplete, onFetchFailure) {
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
})
.then((data) => onFetchComplete(data))
.catch(error => onFetchFailure(error));
}
componentDidMount() {
NetworkUtils.postWithJSONResponse('/login', this.state.userObject,
(data) => {
console.log(data);
},
(error) => {
});
}
Где userObject
состоит из атрибутов username
и password
. Я пробовал несколько вариантов моего маршрута flask, учитывая предыдущие поисковые запросы, перечисленные выше:
Варианты на основе этого вопроса
from flask import jsonify
@app.route('/login', post)
def login_route():
content = request.json
d = {}
d['session-token'] = get_authorization(content['username'], content['password'])
return jsonify(d)
Этот вариант из тот же пост:
@app.route('/login', post)
def login_route():
content = request.json
jwt = get_authorization(content['username'], content['password'])
app.response_class(
response=json.dumps({'session-token': jwt}),
status=200,
mimetype='application/json'
)
И, наконец, эта попытка, в которой было рекомендовано попробовать создать новый объект ответа :
from flask import Flask, request, make_response
@app.route('/login', methods=['POST'])
def login_route():
content = request.json
jwt = get_authorization(content['username'], content['password'])
resp = make_response(json.dumps({'session-token': jwt}), 200)
resp.headers['Content-Type'] = 'application/json'
return resp
Все 3 попытки возвращаются следующие объекты ответа json на мою chrome консоль:
Response {type: "basic", url: "http://localhost:3000/login", redirected: false, status: 200, ok: true, …}
body: ReadableStream
locked: false
__proto__: ReadableStream
bodyUsed: false
headers: Headers
__proto__: Headers
ok: true
redirected: false
status: 200
statusText: "OK"
type: "basic"
url: "http://localhost:3000/login"
__proto__: Response
Как видите, объект ответа не содержит ни одной записи для session-token
. Я действительно не уверен, что здесь может быть не так, и я не уверен, связана ли проблема с маршрутом flask или javascript. Излишне говорить, что мне нужна помощь, и любые рекомендации будут оценены. Я использую Flask версию 1.1.2.