首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >小白学Flask第六天| abort函数、自定义错误方法、视图函数的返回值

小白学Flask第六天| abort函数、自定义错误方法、视图函数的返回值

作者头像
Python进击者
发布2019-09-03 17:47:50
发布2019-09-03 17:47:50
2.7K00
代码可运行
举报
文章被收录于专栏:JAVAandPython君JAVAandPython君
运行总次数:0
代码可运行

本文内容:

1. abort函数的使用

2. 自定义错误处理方法

3. 设置响应信息的方法

4. 返回json数据的方法

abort函数的使用

abort函数是我们又新接触的一个函数,具体有什么作用?简单点说它可以终止视图函数的执行并且还可以返回给前端特定的信息。

下面我将举两个特定的例子

首先第一种:传递状态码信息(必须是http标准状态码)

代码语言:javascript
代码运行次数:0
运行
复制
# -*- coding: utf-8 -*-
from flask import Flask, abort

app = Flask(__name__)

@app.route("/login")
def login():
    # 1. 传递状态码信息(必须是http标准状态码)
    name = ""
    pwd = ""
    # 如果name不等于123 pwd不等于1234 ,我们就返回404状态码
    if name != "123" and pwd != "1234":
        abort(404)

    return "login success"

if __name__ == '__main__':
    app.run(debug=True)

我们运行一下:

可以看到返回为404的结果页面

除了返回状态码外,abort函数还能传递响应体信息:

代码语言:javascript
代码运行次数:0
运行
复制
# -*- coding: utf-8 -*-
from flask import Flask, abort, Response

app = Flask(__name__)

@app.route("/login")
def login():
    # 2. 传递响应体信息
    name = ""
    pwd = ""
    if name != "123" and pwd != "1234":
        resp = Response("login failed")
        abort(resp)

    return "login success"

if __name__ == '__main__':

    app.run(debug=True)

我运行之后看结果:

返回了我们想要的结果。其实这里我们可以直接使用return来返回结果,不需要通过Response对象来返回,所以这种返回方式我们并不经常使用。

自定义错误处理方法

我们上面通过abort返回的状态码404,所返回的页面都是固定的404页面,有时我们需要去自己定义返回的页面信息,我们该如何去做?

代码语言:javascript
代码运行次数:0
运行
复制
# -*- coding: utf-8 -*-
from flask import Flask, abort, Response

app = Flask(__name__)

@app.errorhandler(404)
def handle_404_error(err):
    '''自定义的处理错误方法'''
    # 这个返回值会是用户在前端中所看到的结果
    return u"很抱歉,出现了404错误  错误信息: %s" % err

if __name__ == '__main__':

    app.run(debug=True)

大家可以看到上面的handle_404_error函数,我们首先通过修饰器app.errorhandler(404)绑定了404的状态码,之后我们可以在这个函数中定义自己想要返回的页面信息。

运行结果:

设置响应信息的方法

设置响应信息的方法有两种,我们先来讲讲第一种,通过元组的形式,返回自定义的响应信息。

代码语言:javascript
代码运行次数:0
运行
复制
@app.route("/index")
def index():
    # 1. 通过元组来自定义返回响应信息
    return ("index page", 400, [("itcast","python"), ("City", "hn")])

大家可以看到我们成功的返回了我们自定义的响应信息,当然除了这种方式,我们还可以将响应头以字典的形式来返回:

代码语言:javascript
代码运行次数:0
运行
复制
@app.route("/index")
def index():
    # 1. 通过元组来自定义返回响应信息
    return ("index page", 400, {"itcast":"python","City":"hn"})

其返回结果与上图一致。

除了一些规定的状态码,我们也可以返回自定义的状态码:

代码语言:javascript
代码运行次数:0
运行
复制
@app.route("/index")
def index():
    # 1. 通过元组来自定义返回响应信息
    # return ("index page", 400, [("itcast","python"), ("City", "hn")])
    return ("index page", 666, {"itcast":"python","City":"hn"})

除了上面的方法去设置响应信息,我们还可以通过make_response函数来进行返回:

代码语言:javascript
代码运行次数:0
运行
复制
# -*- coding: utf-8 -*-
from flask import Flask, make_response

app = Flask(__name__)
@app.route("/index")
def index():
    resp = make_response("index page")
    resp.status = "666"
    resp.headers["city"] = "hn"
    return resp

if __name__ == '__main__':
    app.run(debug=True)

其效果与通过元组设置相同

返回json数据的方法

在Flask中,我们如何返回json数据呢?在Flask中给我们提供了一个函数-jsonify,如何使用?

代码语言:javascript
代码运行次数:0
运行
复制
# -*- coding: utf-8 -*-
from flask import Flask, jsonify
import json

app = Flask(__name__)
@app.route("/index")
def index():
    data = {
        "name":"javaandpython",
        "age":20
    }
    return jsonify(data)

if __name__ == '__main__':
    app.run(debug=True)

jsonify不仅可以帮我们把字典转为json格式,还能帮我们把响应头中的Content-Type设置为application/json。

我们除了把字典形式放入jsonify当中,还可以直接把数据传到jsonify函数当中:

代码语言:javascript
代码运行次数:0
运行
复制
@app.route("/index")
def index():
    return jsonify(name="javaandpython", age=20)

这样是相同的效果


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python进击者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档