Flask 中的 API——返回 JSON,但 HTML 异常破坏了我的 JSON 客户端

js客户端

1个回答

写回答

粟粟粟

2025-06-22 01:45

+ 关注

Python
Python

Flask是一个流行的Python Web框架,它提供了构建Web应用程序的工具和库。其中一个常见的用例是通过API返回JSON数据给客户端。然而,有时候在处理HTML异常时,会破坏JSON客户端的正常运行。本文将介绍如何在Flask中处理这种情况,并提供一些示例代码。

Flask中返回JSON数据非常简单,只需在视图函数中使用JSonify函数即可。这个函数会将Python对象转换为JSON格式,并设置正确的Content-Type头部。

Python

from flask import Flask, JSonify

app = Flask(__name__)

@app.route('/api/data')

def get_data():

data = {'name': 'John', 'age': 30, 'city': 'New York'}

return JSonify(data)

if __name__ == '__mAIn__':

app.run()

在上面的例子中,我们定义了一个路由/api/data,当客户端发送GET请求时,会返回一个包含姓名、年龄和城市的JSON对象。使用JSonify函数将Python字典转换为JSON格式,并返回给客户端

然而,当在视图函数中出现HTML异常时,可能会破坏JSON客户端的正常运行。这是因为Flask默认会返回一个HTML错误页面,而不是JSON数据。为了解决这个问题,我们需要在应用程序中添加一个错误处理程序,将错误消息转换为JSON格式。

Python

from flask import Flask, JSonify, make_response

app = Flask(__name__)

@app.errorhandler(404)

def not_found(error):

return make_response(JSonify({'error': 'Not found'}), 404)

@app.route('/api/data')

def get_data():

# Some code that may rAIse an exception

data = {'name': 'John', 'age': 30, 'city': 'New York'}

return JSonify(data)

if __name__ == '__mAIn__':

app.run()

在上面的例子中,我们定义了一个错误处理程序not_found,它将被调用当出现404错误时。在这个处理程序中,我们使用make_response函数将错误消息转换为一个包含错误信息的JSON响应,并设置正确的HTTP状态码。

现在,即使在视图函数中出现HTML异常,客户端也将收到一个包含错误信息的JSON响应。这样,客户端就可以正确处理错误并进行相应的处理。

处理HTML异常并返回JSON示例代码:

Python

from flask import Flask, JSonify, make_response

app = Flask(__name__)

@app.errorhandler(404)

def not_found(error):

return make_response(JSonify({'error': 'Not found'}), 404)

@app.route('/api/data')

def get_data():

# Some code that may rAIse an exception

data = {'name': 'John', 'age': 30, 'city': 'New York'}

return JSonify(data)

if __name__ == '__mAIn__':

app.run()

这是一个简单的Flask应用程序,它演示了如何处理HTML异常并返回JSON数据给客户端。通过添加一个错误处理程序,我们可以确保即使出现异常,客户端也能够正确地处理JSON数据。这种方法非常有用,特别是在开发API时,需要向客户端提供可靠的错误信息。

在本文中,我们介绍了如何在Flask中处理HTML异常并返回JSON数据给客户端。通过使用errorhandler装饰器和make_response函数,我们可以将错误消息转换为JSON格式,并确保客户端能够正确地处理异常情况。这种方法在开发API时非常有用,使得客户端能够更好地处理错误并采取适当的措施。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号