zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    2016第50周五
    2016第50周四
    2016第50周三
    2016第50周二
    2016第50周一
    2016第49周日
    软件架构、框架、模式、模块、组件、插件概念汇总
    2016第49周五
    2016第49周四
    从服务器上共享文件上下载文件或上传文件
  • 原文地址:https://www.cnblogs.com/luo630/p/9062739.html
Copyright © 2011-2022 走看看