Py学习  »  Jquery

使flask服务器和jquery通信[复制]

user462794 • 6 年前 • 2180 次点击  

我正在尝试使用flask构建一个简单的api,现在我想在其中阅读一些发布的json。我用 PostMan Chrome extension ,我发布的json只是 {"text":"lalala"} . 我尝试使用以下方法读取json:

@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
    content = request.json
    print content
    return uuid

在浏览器上,它正确地返回了我在get中输入的uuid,但在控制台上,它只是输出 None (我希望它打印出 {“文本”:“拉拉”} . 有人知道我如何从flask方法中获取发布的json吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39925
文章 [ 5 ]  |  最新文章 6 年前
Aakash Handa
Reply   •   1 楼
Aakash Handa    6 年前

我们可以使用参数来解析json数据

import flask
from flask import request, jsonify
import Parameters

application = flask.Flask(__name__)

@application.route('/myappp', methods=['POST'])
    @cross_origin('*')
    def User_details_by_mailID():
        payload = request.get_json()
        email = payload[Parameters.email]
        return jsonify(email)
trojek
Reply   •   2 楼
trojek    8 年前

此解决方案有效:

from flask import Flask, request, jsonify

app = Flask(__name__)


@app.route('/hello', methods=['POST'])
def hello():
   return jsonify(request.json)
cricket_007
Reply   •   3 楼
cricket_007    6 年前

我就是这么做的

@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
    content = request.get_json(silent=True)
    # print(content) # Do your processing
    return uuid

silent=True 设定,设定 get_json 当尝试检索json主体时,函数将自动失败。默认设置为 False .

设置 force=True 将忽略 request.headers.get('Content-Type') == 'application/json' 检查一下那个瓶子是否适合你。默认情况下,这也设置为

flask documentation .

我强烈建议你离开 force=False 让客户发送 Content-Type 使其更加明确。

希望这有帮助!

Community Oded
Reply   •   4 楼
Community Oded    8 年前

作为参考,下面是如何从python客户端发送json的完整代码:

import requests
res = requests.post('http://localhost:5000/api/add_message/1234', json={"mytext":"lalala"})
if res.ok:
    print res.json()

“json=”输入将自动设置内容类型,如下所述: Post JSON using Python Requests

上面的客户端将使用此服务器端代码:

from flask import Flask, request, jsonify
app = Flask(__name__)

@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
    content = request.json
    print content['mytext']
    return jsonify({"uuid":uuid})

if __name__ == '__main__':
    app.run(host= '0.0.0.0',debug=True)
Martijn Pieters
Reply   •   5 楼
Martijn Pieters    6 年前

首先, .json 属性是委托给 request.get_json() method ,你为什么会看到 None 在这里。

您需要将请求内容类型设置为 application/json 对于 杰森 财产和 .get_json() 方法(不带参数)将产生 没有 否则。见 Flask Request documentation :

如果mimetype指示json,则将包含解析的json数据( 应用程序/json is_json() ),否则 没有 .

你看得出 请求。获取json() 通过传递内容类型要求 force=True 关键字参数。

注意,如果 例外 此时引发(可能导致400个错误的请求响应),您的json 数据 无效。它在某种程度上格式不正确;您可能需要使用json验证器来检查它。