当前位置: 首页 > 知识库问答 >
问题:

在Flask“POST”路由中发送JSON响应

徐瑞
2023-03-14

作为参考,我研究了以下三个问题:

从Flask视图返回JSON响应

使用Flask响应发送JSON和状态代码

返回请求。来自 Flask 的响应对象

如标题所示,我试图从flask post方法返回一个JSON响应。烧瓶路径如下:

@app.route('/login', methods=['POST'])
def login_route():
    content = request.json
    jwt = get_authorization(content['username'], content['password'])
    return {'session-token': jwt} , 200

在我的web应用程序中,我希望将< code>session-token存储在cookies中的什么位置(目前)。

目前在web端,我有以下代码:

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用户名和密码属性组成。鉴于上面列出的先前搜索,我已经尝试了烧瓶路线的一些变体:

基于此问题的变体

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

如您所见,响应对象不包含会话令牌的单个条目。我真的不确定这里可能出了什么问题,我不确定问题是否与烧瓶路线或javascript有关。毋庸置疑,我可以使用一些帮助,任何建议将不胜感激。我使用的是 Flask 版本 1.1.2。

共有1个答案

梁丘璞瑜
2023-03-14

Javascript中的< code>fetch API很好,因为它提供了您在登录时看到的选项,比如可能以流的形式访问主体(现在是TC 39...),但对于90%的情况来说,这完全是过度设计了。要记住的魔咒如下:

// can only do this inside an async function
const resp = await fetch(someURL);
const jsonData = await resp.json();
// step 3, profit
fetch(someURL)
  .then(resp => resp.json())
  .then(jsonData => /* profit! */);

它们在功能上是等价的。如果你总是想在学校的午餐时间坐在酷孩子的桌子旁,那就用新的吧。如果你是一个像我一样的老顽固,抱怨孩子们这些天的餐桌和午餐时间都很酷,那就用另一个吧。

 类似资料:
  • 我得到以下错误 响应数据为空。我做错了什么,或者我在代码中遗漏了什么?

  • 现代Web框架使用路由技术来帮助用户记住应用程序URL。 无需从主页导航即可直接访问所需页面。 Flask中的装饰器用于将URL绑定到函数。 例如 - 这里,URL 规则绑定到函数。 因此,如果用户访问URL : ,就会调用函数,这个函数中的执行的结果输出将在浏览器中呈现。 应用程序对象的函数也可用于将URL与函数绑定,如上例所示,使用。

  • 我可以在POST请求时发送对象列表作为响应,并在VueJs客户端中接收它 但是当我尝试用自定义类响应时(我甚至在请求映射注释中添加了) 在axios的帮助下发送VueJs端请求。邮递 Vue用户界面客户端接收 为什么我可以用对象列表响应而不能用POJO响应,以及如何解决这个问题?非常感谢。 PS.项目依赖于jackson-数据库v2.8.2和Spring v4.3.1

  • 问题内容: 我知道我可以使用设置响应的状态码。设置状态代码时如何返回JSON数据? 问题答案: 使用。此方法采用任何可序列化的数据类型。例如,在以下示例中,我使用了字典。 要返回状态码,请返回响应和代码的元组: 请注意,默认状态代码为200,因此无需指定该代码。 更新 从 Flask 1.1开始 ,return语句将在第一个返回值中自动创建一个字典。您可以直接返回数据: 您还可以使用状态代码返回它

  • 问题内容: 我正在使用Retrofit集成我的Web服务,但我不明白如何使用POST请求将JSON对象发送到服务器。我目前陷入困境,这是我的代码: 活动:- PostInterface:- 要求JSON:- 响应JSON:- 问题答案: 在gradle中使用这些 使用这两个POJO类........ LoginData.class LoginResult.class 像这样使用API 使用这样的呼

  • 我试图用json作为主体数据在jmeter中发布帖子,但我只得到了400。我发送到的URL只接受json。我在《邮差》中也用过同样的卷发,效果很好。我曾尝试将json作为一个没有名称的值放入参数中,但没有成功。 我只是想发送{“uid”:“jmtest”,“name”:“newdevice”}。 对不起,我不能发布更多的链接。 采样结果为 请求看起来像 响应数据为