Flask:abort()函数
Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2
abort()函数用于提前退出(Google翻译abort)一个请求,并用指定的错误码返回。
函数原型如下:
flask.abort(status, *args, **kwargs)
第一个status参数可以是一个状态码,比如,404,也可以是一个WSGI应用,必不可少!示例如下:
abort(404) # 404 Not Found
abort(Response('Hello World')) # Response包装的一个WSGI应用
注意,状态码要出现在Flask定义的异常号列表(the list of exceptions)中,否则会引发内部服务器错误,比如,传递2XX、3XX就不可以的。
异常号列表如下:定义在werkzeug.exceptions.default_exceptions中。
下面是我测试:
1 # flask.abort(status, *args, **kwargs) test 2 @app.route('/abort0') 3 def abort0(): 4 abort(300) 5 6 @app.route('/abort1') 7 def abort1(): 8 abort(400) 9 10 @app.route('/abort2') 11 def abort2(): 12 abort(500) 13 14 @app.route('/abort3') 15 def abort3(): 16 abort('A test of flask.abort()') 17 18 @app.route('/abort4') 19 def abort4(): 20 abort(Response('A test of flask.abort(), Response, ')) 21 22 @app.route('/abort5') 23 def abort5(): 24 abort() 25 26 @app.route('/abort6') 27 def abort6(): 28 cnum = request.args.get('num', '') 29 if cnum == '' or not cnum.isdigit(): 30 abort(404) 31 else: 32 abort(int(cnum))
abort0~4是最初写的,后来写了abort5、6。
下面是访问各个链接时页面及命令行显示(出错时)的内容:
/abort0
/abort1
/abort2
/abort3
/abort4
/abort5
/abort6
/abort6?num=100
/abort6?num=505
/abort6?num=431
/abort6?num=tom
测试完毕。对abort()函数的使用更熟悉了,该踩的坑都算踩过了吧。
abort()函数的使用有何好处呢?可以让开发者在检测到Web访问错误时,立即将错误信息返回。错误码中已对应的错误,使用错误码返回即可,否则,返回另外的WSGI应用。
另外,在使用abort()函数前要做日志记录——错误日志!前,很重要!否则,日志是记录不了的!Quickstart文档中也有说明。
絮叨:
不过,对于传递WSGI应用这个功能还有不清楚的地方,等熟悉了什么是WSGI之后,再找机会记录。
通过编写上面的代码,第一次写了有条件判断的代码,熟悉了字符串怎么转整数、转整数前的判断等。
感觉还有一点东西没有记录,是什么呢?对了,如何和定制错误页面搭配使用?比如已经为404定制了错误页面,这时执行abort(Response(...)),这时是返回定义错误页面呢,还是
返回abort里面的WSGI应用?
使用下面的代码初步进行了测试,测试结果显示 返回了定制的404页面:
1 # 1043 2 @app.errorhandler(404) 3 def page_not_found(error): 4 ctx = {} 5 ctx['name'] = 'Benjamin' 6 ctx['yourname'] = 'Alice' 7 return render_template('tmpt1.html', **ctx), 404
页面、Console及命令行输出:虽然页面没有显示404错误,但是,浏览器Console里面显示了此信息——在响应头里面。
flask.
abort
(status, *args, **kwargs)