Javascript flask.abort()具体做什么?
我实际上是在用烧瓶。 我使用flask来运行一个服务器,这将由chrome扩展(js)请求 从扩展请求服务器非常简单:我使用这个方法。该方法还提供了一个回调函数,将JSON对象(来自服务器的响应)作为参数 例如,假设我的服务器上有此路由:Javascript flask.abort()具体做什么?,javascript,python,google-chrome,flask,Javascript,Python,Google Chrome,Flask,我实际上是在用烧瓶。 我使用flask来运行一个服务器,这将由chrome扩展(js)请求 从扩展请求服务器非常简单:我使用这个方法。该方法还提供了一个回调函数,将JSON对象(来自服务器的响应)作为参数 例如,假设我的服务器上有此路由: @app.route('/users', methods=['POST']) def api_login(): if 'username' not in request.json : return jsonify
@app.route('/users', methods=['POST'])
def api_login():
if 'username' not in request.json :
return jsonify(success=false)
else :
return jsonify(success=true)
然后,我可以在扩展中,更准确地说,在回调函数中,检查success值:
function(response) {
if(response.success){
console.log("Login ok !")
}
}
但现在,我的团队不想再依赖于此,而是想使用http错误代码。我知道flask有一个中止功能,但在阅读文档时,我很难理解它真正的功能。当我在我的路线中呼叫时:
else:
abort(422, {"error":"Missing parameters"})
如何在扩展(js)上使用这些信息?调用abort时flask是否自动返回特定的JSON对象?如何检查错误代码?我希望在客户端代码中执行类似操作:
if(response.status == 422) {
console.log("Error")
}
阅读所有关于abort()的StackOverflow线程的线索之一是使用decorator@app.errorhandler(代码)定义一个特定的错误函数:
但我认为还有更直接的方法
感谢您的帮助。请注意,我在本例中使用JQuery是因为它更简单,并且可以避免很多压力和跨浏览器问题 如果您只是像已经在做的那样传入错误代码,Werkzeug会将错误消息包装在html中(尽管您仍然可以使用正则表达式在客户端提取错误消息,但这并不是很灵活)因此没有Flask不会自动将JSON字符串返回给客户端 flask
abort
方法要么接受错误代码,要么接受响应
对象。要实现您想要做的事情,您必须将响应
对象传递给中止
方法
响应对象是对象周围的包装器
还有一个助手方法可以创建一个名为的响应对象,这样,如果您只想创建一个简单的响应
对象,就不必去摆弄响应
类
创建Response
对象而不允许render\u template
或abort
为您这样做的原因之一是当您需要向响应添加自定义标题或更改abort
添加到响应中的默认标题时
app.py
from flask import Flask, abort, render_template, Response
from json import dumps
app = Flask(__name__)
@app.route('/')
def home():
return render_template('client.html')
@app.route('/resource')
def resource():
error_message = dumps({'Message': 'You cannot see this!!!'})
abort(Response(error_message, 401))
if __name__ == '__main__':
app.run()
client.html
<html>
<head>
<title></title>
<meta content="">
<style></style>
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous">
</script>
</head>
<body>
<script>
$.ajax({
url: 'http://localhost:5000/resource',
dataType: 'json',
success: function(data){
alert('Your request was successful');
},
statusCode: {
401: function (response) {
error = JSON.parse(response.responseText)
alert(error.Message)
}
}
});
</script>
</body>
</html>
$.ajax({
网址:'http://localhost:5000/resource',
数据类型:“json”,
成功:功能(数据){
警报(“您的请求成功”);
},
状态代码:{
401:功能(响应){
error=JSON.parse(response.responseText)
警报(错误消息)
}
}
});
通过在statusCode
您仍然可以通过纯Javascript实现这一点,它只需要更多的击键
您应该仔细阅读werkzeug的源代码,以便更好地了解通常如何处理abort
和异常
<html>
<head>
<title></title>
<meta content="">
<style></style>
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous">
</script>
</head>
<body>
<script>
$.ajax({
url: 'http://localhost:5000/resource',
dataType: 'json',
success: function(data){
alert('Your request was successful');
},
statusCode: {
401: function (response) {
error = JSON.parse(response.responseText)
alert(error.Message)
}
}
});
</script>
</body>
</html>