问题描述
在 Postman post_new_cafe 打印 json 就像它想象的那样,但是当我想在控制台和网页中打印它时,它的打印方式不同。请参阅下面的示例。
@app.route('/add_form',methods=['GET','POST'])
def add_new_cafe_form():
form = CafeForm()
if form.validate_on_submit():
response = post_new_cafe()
print(response)
return render_template("add.html",form=form)
打印出来
和
@app.route('/add_form','POST'])
def add_new_cafe_form():
form = CafeForm()
if form.validate_on_submit():
response = post_new_cafe()
print(response.response)
return render_template("add.html",form=form)
打印出来
[b'{\n "success": "成功添加新咖啡馆。"\n}\n']
还有这个
@app.route('/add_form','POST'])
def add_new_cafe_form():
form = CafeForm()
if form.validate_on_submit():
response = post_new_cafe()
print(response.json())
return render_template("add.html",form=form)
报错
这是返回jsonify的函数
# # HTTP POST - Create Record
@app.route('/add',methods=['POST'])
def post_new_cafe():
new_cafe = Cafe(
name=request.form.get('name'),map_url=request.form.get('map_url'),img_url=request.form.get('img_url'),location=request.form.get('location'),seats=request.form.get('seats'),has_toilet=bool(strtobool(request.form.get('has_toilet'))),has_wifi=bool(strtobool(request.form.get('has_wifi'))),has_sockets=bool(strtobool(request.form.get('has_sockets'))),can_take_calls=bool(strtobool(request.form.get('can_take_calls'))),coffee_price=request.form.get('coffee_price')
)
# db.session.add(new_cafe)
# db.session.commit()
return jsonify(success="Successfully added the new cafe.")
我已经试过了
resp = Response(response={"success":"Successfully added the new cafe."},status=200,mimetype="application/json")
return jsonify(resp)
它不起作用,我也试过使用 make_response 仍然没有。
我想要的是当我将 post_new_cafe() 存储到响应变量中时有这个
response = post_new_cafe()
data = response.json()
print(data)
{"success": "成功添加新咖啡馆。"}
print(data["success"])
已成功添加新咖啡馆。
解决方法
嘿,你可以用 json 库解决这个问题。
示例:
import json
def post_new_cafe():
new_cafe = Cafe(
name=request.form.get('name'),map_url=request.form.get('map_url'),img_url=request.form.get('img_url'),location=request.form.get('location'),seats=request.form.get('seats'),has_toilet=bool(strtobool(request.form.get('has_toilet'))),has_wifi=bool(strtobool(request.form.get('has_wifi'))),has_sockets=bool(strtobool(request.form.get('has_sockets'))),can_take_calls=bool(strtobool(request.form.get('can_take_calls'))),coffee_price=request.form.get('coffee_price')
)
return json.dumps({"success": "Succesfully added the new cafe."})
response = post_new_cafe()
data = json.loads(response)
print(data)
print(data["success"])
有关详细信息,请查看 Documentation about JSON
如果需要序列化一个numpy数组,how to serialize a numpy array as JSON上有个问题
关于您的其他问题:
@app.route('/add_form',methods=['GET','POST'])
def add_new_cafe_form():
form = CafeForm()
if form.validate_on_submit():
response = post_new_cafe()
print(response.json())
return render_template("add.html",form=form)
您需要先将响应从二进制转换为字符串:response.decode('utf-8')
,然后将其解析为 JSON:json.loads(response.decode('utf-8'))