【问题标题】:How to get valid json resp from Flask app with jsonapi version 1.0, "Content-type"="application/vnd.api+json"如何使用 jsonapi 版本 1.0、“Content-type”=“application/vnd.api+json”从 Flask 应用程序获取有效的 json 响应
【发布时间】:2017-08-18 05:44:25
【问题描述】:

我未能从下面的代码中得到任何响应。我尝试了不同的“内容类型”,尝试以各种可能的方式构建我的 json。请帮忙。

@app.route('/api/v1/client', methods={'GET', 'POST'})
def client():
 if request=='post':
     req = request.get_data()
     data = req.json
     user_id = data["data"]["attributes"]["user_id"]
     redirect_uri = data["data"]["attributes"]["_redirect_uris"]
     default_scopes = data["data"]["attributes"]["_default_scopes"]

     item = Client(
         client_id=gen_salt(40),
         client_secret=gen_salt(55),

         _redirect_uris=' '.join(redirect_uri),
         _default_scopes=' '.join(default_scopes),
         user_id=user_id,

         allowed_grant_types=' '.join(['implicit', ]),
         allowd_response_types=' '.join(['token', ])
         )

     db.session.add(item)
     db.session.commit()

     resp = {
         "data":{
             "attributes":{
                 "client_id" : "client id",
                 "client_secret" : "client_secret"
             },
         "jsonapi":{
             "version" : "1.0"
             },
         "type":"client"
         }
     }

     resp["data"]["attributes"]["client_id"] = item.client_id
     resp["data"]["attributes"]["client_secret"]= item.client_secret
     status = 200

     return (jsonify(resp), status, {"Content-type":"application/vnd.api+json"})

请帮帮我!我一定是在做完全错误的事情。但是一个非常相似的代码正在另一个函数中工作。 我得到的错误是“ValueError: View function did not return a response // Werkzeug Debugger”。

【问题讨论】:

    标签: python json flask


    【解决方案1】:

    首先,如果你想检查请求是否通过 POST 发送,你应该使用if request.method == 'POST': 而不是if request == 'POST':

    如果你想获取请求的 JSON 正文,你应该使用request.get_json()

    您的其余工作似乎还不错,但我建议您在做某事之前阅读完整的 Flask 文档。

    【讨论】:

    • 感谢您的回答。实际上,我在 POST 请求中将 json (jsonapi v1,0) 作为原始字符串传递(一些要求,因为 API 的其余部分是用 Flask-restless 编写的,它需要这种格式的 json;我希望整个 API 保持一致);因此无法使用 get_json()。而且,由于我们需要在返回任何响应之前阅读 POST 正文,所以我得到了空响应,因此出现了上述错误。得到它滴答作响:/req = request.get_data()/ /data = json.loads(req)/ 感谢 request.method,我完全看错了。
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多