• Flask 学习68. abort() 退出请求 上海


    前言

    使用 abort() 可以 更早退出请求,并返回错误代码

    abort() 函数

    使用abort函数可以立即终止视图函数的执行,并可以返回特定的信息

    abort(404)  # 404 Not Found
    abort(Response('Hello World'))
    

    源码介绍

    def abort(
        status: t.Union[int, "Response"], *args: t.Any, **kwargs: t.Any
    ) -> "te.NoReturn":
        """Raises an :py:exc:`HTTPException` for the given status code or WSGI
        application.
    
        If a status code is given, it will be looked up in the list of
        exceptions and will raise that exception.  If passed a WSGI application,
        it will wrap it in a proxy WSGI exception and raise that::
    
           abort(404)  # 404 Not Found
           abort(Response('Hello World'))
    
        """
        _aborter(status, *args, **kwargs)
    
    

    使用示例

    from flask import Flask, request, g, abort, Response
    app = Flask(__name__)
    
    
    @app.route("/demo", methods=["GET"])
    def demo():
        if not request.args.get('user'):
            abort(400)  # 400 bad request
        else:
            res = Response('hello world')
            return abort(res)
    

    注意,状态码要出现在Flask定义的异常号列表(the list of exceptions)中,否则会引发内部服务器错误,比如,传递206,307就会报错

    LookupError
    LookupError: no exception for 307
    

    exceptions 异常列表

    异常列表定义在werkzeug.exceptions.default_exceptions中。
    使用pprint可以查看全部状态码和对应的类

    import pprint
    import werkzeug
    pprint.pprint(werkzeug.exceptions.default_exceptions)
    

    运行结果

    {400: <class 'werkzeug.exceptions.BadRequest'>,
     401: <class 'werkzeug.exceptions.Unauthorized'>,
     403: <class 'werkzeug.exceptions.Forbidden'>,
     404: <class 'werkzeug.exceptions.NotFound'>,
     405: <class 'werkzeug.exceptions.MethodNotAllowed'>,
     406: <class 'werkzeug.exceptions.NotAcceptable'>,
     408: <class 'werkzeug.exceptions.RequestTimeout'>,
     409: <class 'werkzeug.exceptions.Conflict'>,
     410: <class 'werkzeug.exceptions.Gone'>,
     411: <class 'werkzeug.exceptions.LengthRequired'>,
     412: <class 'werkzeug.exceptions.PreconditionFailed'>,
     413: <class 'werkzeug.exceptions.RequestEntityTooLarge'>,
     414: <class 'werkzeug.exceptions.RequestURITooLarge'>,
     415: <class 'werkzeug.exceptions.UnsupportedMediaType'>,
     416: <class 'werkzeug.exceptions.RequestedRangeNotSatisfiable'>,
     417: <class 'werkzeug.exceptions.ExpectationFailed'>,
     418: <class 'werkzeug.exceptions.ImATeapot'>,
     422: <class 'werkzeug.exceptions.UnprocessableEntity'>,
     423: <class 'werkzeug.exceptions.Locked'>,
     424: <class 'werkzeug.exceptions.FailedDependency'>,
     428: <class 'werkzeug.exceptions.PreconditionRequired'>,
     429: <class 'werkzeug.exceptions.TooManyRequests'>,
     431: <class 'werkzeug.exceptions.RequestHeaderFieldsTooLarge'>,
     451: <class 'werkzeug.exceptions.UnavailableForLegalReasons'>,
     500: <class 'werkzeug.exceptions.InternalServerError'>,
     501: <class 'werkzeug.exceptions.NotImplemented'>,
     502: <class 'werkzeug.exceptions.BadGateway'>,
     503: <class 'werkzeug.exceptions.ServiceUnavailable'>,
     504: <class 'werkzeug.exceptions.GatewayTimeout'>,
     505: <class 'werkzeug.exceptions.HTTPVersionNotSupported'>}
    
  • 相关阅读:
    以用户名注册来分析三种Action获取数据的方式
    Struts2中的OGNL详解 《转》
    Module 'null' not found异常解决办法
    struts标签<logic:iterate>的用法
    struts2的核心和工作原理 <转>
    jstl标签怎么实现分页中下一页
    forward 和redirect
    forward 和redirect的区别
    今天早上起来就想着要问问龙虎有圆通没
    昨天晚上回来弄了两个皮蛋吃
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/16683095.html
Copyright © 2020-2023  润新知