flask教程5:abort函数、自定义错误、 视图函数的返回值
创始人
2025-05-29 05:04:31

文章目录

  • 一、abort()函数的使用
    • 1.传递状态码信息
    • 2.传递响应体消息
  • 二、自定义错误处理 app.errorhandler
  • 三、设置响应信息
    • 1.使用元祖,返回自定义的响应信息
    • 2.使用make_response方法来构造响应体信息
  • 四、返回json数据的方法
    • 使用json 库
    • 使用jsonify库


一、abort()函数的使用

      abort()函数可以立即终止视图函数的执行,并返回前端特定的信息,其方法可分为两种:

1.传递状态码信息

状态码(必须是标准的http状态码),示例如下:

from flask import Flask, Response, abortapp = Flask(__name__)@app.route("/login", methods=["GET"])
def get_login():name = " "pwd = " "if name != "zhangsan" and pwd != "123456":abort(400)# abort()会终止视图函数的执行,return不会执行return "login success"if __name__ == '__main__':app.run(host="127.0.0.1", port=8000, debug=True)

2.传递响应体消息

使用这种方式需要导入Response库,通过
from flask import Response进行导入,示例如下:

from flask import Flask, Response, abortapp = Flask(__name__)@app.route("/login",methods=["GET"])
def get_login():name = " "pwd = " "if name != "zhangsan" and pwd != "123456":resp = Response("login fail") #接收字符串abort(resp)# abort()会终止视图函数的执行,return不会执行return "login success"if __name__ == '__main__':app.run(host="127.0.0.1", port=8000, debug=True)

二、自定义错误处理 app.errorhandler

      在默认的http请求中,如果没有进行特别的自定义需求,那么出现404错误之类的,则会显示Not Found等信息。

      如果需要在发生错误的时候,再进行一系列的业务处理,这时候就可以使用自定义的错误处理方法。

# 定义错误处理的方法
@app.errorhandler(404)
def handle_404_error(err):"""自定义的处理错误方法"""# 这个函数的返回值会是前端用户看到的最终结果return "出现了404错误, 错误信息:%s" % err

示例

from flask import Flask, request, abort# 实例化app
app = Flask(import_name=__name__)@app.route('/login', methods=["GET","POST"])
def login():user_name = ''user_pwd = ''if user_name != '余' and user_pwd != '123':abort(404)return "login sucess"# 定义错误处理的方法
@app.errorhandler(404)
def handle_404_error(err):"""自定义的处理错误方法"""# 这个函数的返回值会是前端用户看到的最终结果return "出现了404错误, 错误信息:%s" % errif __name__ == '__main__':app.run(debug=True)
如果输入一个不存在的网址

三、设置响应信息

      设置响应信息的方法有两种,一是使用元祖,返回自定义的响应信息;二是使用make_response方法来构造响应体信息,以下来进行描述:
      

1.使用元祖,返回自定义的响应信息

from flask import Flaskapp = Flask(__name__)@app.route("/index")
def index():# 1.使用元祖,返回自定义的响应信息# 响应信息:响应体,状态码,响应头return ("hello world", 404 ,[("name","zhangsan"),("age","18")])if __name__ == '__main__':app.run(debug = True)

![在这里插入图片描述](https://img-

此外,响应头可以由列表改成字典的方式进行传递如下:

return ("index page", 666 , {"itcast":"python","city":"shenzhen"})

状态码的设置可以进行修改,同时也可进行提示语的标注(不可添加中文,会报错),例如:

return ("index page", "404 hello" ,[("itcast","python"),("city","shenzhen")])

      

2.使用make_response方法来构造响应体信息

      这里要先导入make_response库,例如:

from flask import Flask,make_response
from flask import Flask,make_responseapp = Flask(__name__)@app.route("/index")
def index():# 2.使用make_response 来构造响应体信息response = make_response("hello world") # 构造响应体response.status = "404" # 构造状态码response.headers["name"] = "zhangsan" # 定义响应头response.headers["age"] = "18"return responseif __name__ == '__main__':app.run(debug = True)

四、返回json数据的方法

在Flask中直接返回list或dict是不行的

HTTP返回json格式数据主要有两个方面:

  • 数据本身为json格式;

  • Content-Type声明为json格式。

使用json 库

首先简单了解一下json库,这个库有两个常用的方法

 json.dumps(字典)    将python的字典转换为json字符串json.loads(字符串)  将字符串转换为python中的字典

这样当访问时即能够正常得到json数据。但这么做有一个缺点,就是HTTP返回的Content-Type仍然是text/html,即HTTP认为内容是HTML。

在上面的解决方法上作一个加强,手动指定其Content-Type为application/json,通常采用的是修改Flask中的Response模块:

from flask import Flask
from flask import Flask , Response
import jsonapp = Flask(__name__)@app.route("/index")
def index():# 返回json数据的方法data = {"name":"zhangsan","age":18}#response = json.dumps(data)  # 将python的字典转换为json字符串#return response,200,{"Content-Type":"application/json"}return Response (json.dumps(data), mimetype = 'application/json' )if __name__ == '__main__':app.run(debug = True,port=5000)

使用jsonify库

2.通过导入jsonify库帮助转为json数据,并设置响应头 Content-Type 为 application/json

from flask import Flask,jsonify
import jsonapp = Flask(__name__)@app.route("/index")
def index():# 返回json数据的方法data = {"name":"zhangsan","age":18}# 第二种 jsonify帮助转为json数据,并设置响应头 Content-Type 为 application/jsonreturn jsonify(data)if __name__ == '__main__':app.run(debug = True,port=5000)

在这里插入图片描述

相关内容

热门资讯

在x86平台体验龙芯Loong... OS: ubuntu 22.04 x86_64 一、下载Qemu 源码 wget https://d...
项目实战典型案例4——生产环境... 生产环境app打包导致不能自动升级的问题一:背景介绍问题背景:二...
奔奔mini-e怎么样-车主点... 今天给各位分享奔奔mini-e怎么样-车主点评-真实评价-口碑的知识,其中也会对奔奔mini10进行...
逍客逍客最新报价-图片-参数(... 本篇文章极速百科给大家谈谈逍客逍客最新报价-图片-参数,以及逍客2022款报价及参数对应的知识点,希...
全国违章查询在线查询_全国交通... 今天给各位分享全国违章查询在线查询_全国交通违章查询的知识,其中也会对全国违章查询网站在线进行解释,...
道路救援车拖车怎么收费-百度有... 今天给各位分享道路救援车拖车怎么收费-百度有驾的知识,其中也会对道路救援拖车费怎么算进行解释,如果能...
java 每日一练 (8) 文章目录1. 单选题2. 编程题 1. 单选题   1. 下列选项中关于 java 中 super ...
滁新高速淮南段发生一交通事故致... 本篇文章极速百科给大家谈谈滁新高速淮南段发生一交通事故致3人死亡,以及滁新高速淮南段拥堵对应的知识点...
快递投诉电话多少(极兔快递投诉... 今天给各位分享快递投诉电话多少的知识,其中也会对极兔快递投诉电话多少进行解释,如果能碰巧解决你现在面...
五羊本田小公主有几款?(五羊本... 本篇文章极速百科给大家谈谈五羊本田小公主有几款?,以及五羊本田小公主多少钱一台对应的知识点,希望对各...
红蓝buff是什么(红蓝buf... 本篇文章极速百科给大家谈谈红蓝buff是什么,以及红蓝buff是什么意思网络用语对应的知识点,希望对...
Gitee搭建个人博客(Bea... 目录一、引言二、博客模板选型 - Jekyll三、安装Jekyll环境3.1 安装Ruby3.2 安...
记一次磁盘扩容 起因 在使用firefly板子时,刷完固件发现根目录竟然只有3G,根本没...
开车撞死人怎么处理与赔偿?撞死... 今天给各位分享开车撞死人怎么处理与赔偿?撞死人协商最佳时间的知识,其中也会对开车撞死人要赔偿多少钱进...
ulzzang是什么牌子(ul... 本篇文章极速百科给大家谈谈ulzzang是什么牌子,以及ulzzang是什么牌子鞋对应的知识点,希望...
中国各重点城市豪车数量排名:北... 今天给各位分享中国各重点城市豪车数量排名:北上深广包揽前四!的知识,其中也会对中国地区豪车排行榜进行...
大分辨率数据集切割 前言:对于航拍、遥感影像数据集而言,此类数据集包含较多目标,...
叠信纸的四种方法(叠信纸的四种... 本篇文章极速百科给大家谈谈叠信纸的四种方法,以及叠信纸的四种方法a4多张图片对应的知识点,希望对各位...
记录Quartz在项目中的使用... 黑马传智健康项目中遇到的技术,感觉这个解决思路挺新颖的,就记录下来了。用...
Opengauss CLOG模... 上篇讲解了opengauss CLOG模块分区优化原理篇,本文将从源代码实现层面讨论具...
广汽三菱放大招2021款奕歌燃... 今天给各位分享广汽三菱放大招2021款奕歌燃情版上市售价16.78万元的知识,其中也会对广汽三菱弈歌...
科斯沃斯引擎(科斯沃d037)... 今天给各位分享科斯沃斯引擎的知识,其中也会对科斯沃d037进行解释,如果能碰巧解决你现在面临的问题,...
展望过去,想象未来,瑞航360... 今天给各位分享展望过去,想象未来,瑞航360全景2018新征程的知识,其中也会对瑞航lx188机型进...
考研数二第四讲 分段函数的复合... 分段函数的复合函数求分段函数的复合函数,这是考研高数中的一个重要考点。专升本的高数不考...
7座MPV车型推荐,7座MPV... 本篇文章极速百科给大家谈谈7座MPV车型推荐,7座MPV车型大全,以及7座mpv汽车大全2020对应...
支付宝怎么取消自动续费(苹果手... 今天给各位分享支付宝怎么取消自动续费的知识,其中也会对苹果手机支付宝怎么取消自动续费进行解释,如果能...
TH是什么意思(Things是... 本篇文章极速百科给大家谈谈TH是什么意思,以及Things是什么意思翻译对应的知识点,希望对各位有所...
上汽大众途观怎么样(上汽大众途... 本篇文章极速百科给大家谈谈上汽大众途观怎么样,以及上汽大众途观l2022版质量对应的知识点,希望对各...
solidworks转urdf... 是用solidworks成功导出了一次urdf,记录一下导出时各参数的说明。 基座的...
如何买火车票网上订票?网上买火... 今天给各位分享如何买火车票网上订票?网上买火车票怎么买的知识,其中也会对怎样买网上火车票进行解释,如...