IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Flask入门学习(九):自定义错误处理方法

    52txr发表于 2024-07-22 22:56:00
    love 0

    在前面一节,介绍了一下如何主动抛出异常。在Flask中,也可以自定义错误的处理方法,例如如果是404,返回一个404页面。

    静态资源的使用

    在main.py文件的目录下新建一个文件夹,文件夹命名为static,然后把图片放在这个文件夹里面。

    静态资源模板

    然后在templates文件夹里新建一个404.html。在该html中,写入一下内容(其实就是引入图片):

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>404</title>
    </head>
    <body>
    <img src="../static/a404page.jpg" alt="404">
    </body>
    </html>

    自定义处理

    然后在Flask中定义一个errorhandler,里面写入状态码404。

    当系统出现了404的时候,则会调用404.html内容:

    from flask import Flask, abort, request,make_response,render_template
    
    app = Flask(__name__)
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        if request.method == 'GET':
            return render_template("index.html")
    
        if request.method == 'POST':
            name = request.form.get('name')
            password = request.form.get('password')
            if name == 'admin' and password == 'admin123':
                return '登录成功'
            else:
                abort(404)
    
    @app.errorhandler(404)
    def handel_404():
        return render_template('404.html')
    
    if __name__ == "__main__":
        app.run()
    

    注意,这是需要abort与errorhandler配合使用。

    显示404的效果

    类似的还有:

    from flask import Flask, render_template, abort
    
    app = Flask(__name__)
    
    @app.errorhandler(404)
    def page_not_found(error):
        return render_template('404.html'), 404
    
    @app.errorhandler(500)
    def internal_server_error(error):
        return render_template('500.html'), 500
    
    @app.route('/error/<int:code>')
    def trigger_error(code):
        if code == 400:
            abort(400)
        elif code == 401:
            abort(401)
        elif code == 403:
            abort(403)
        elif code == 404:
            abort(404)
        elif code == 500:
            abort(500)
        else:
            return "No error triggered"
    
    if __name__ == '__main__':
        app.run(debug=True)


沪ICP备19023445号-2号
友情链接