社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Jquery

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

user462794 • 5 年前 • 1991 次点击  

我正在尝试使用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
 
1991 次点击  
文章 [ 5 ]  |  最新文章 5 年前
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验证器来检查它。