文章目录
一、abort()函数的使用
abort()函数可以立即终止视图函数的执行,并返回前端特定的信息,其方法可分为两种:
1.传递状态码信息
状态码(必须是标准的http状态码),示例如下:
from flask import Flask, Response, abort
app = 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, abort
app = 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" % err
if __name__ == '__main__':
app.run(debug=True)
如果输入一个不存在的网址
三、设置响应信息
设置响应信息的方法有两种,一是使用元祖,返回自定义的响应信息;二是使用make_response方法来构造响应体信息,以下来进行描述:
1.使用元祖,返回自定义的响应信息
from flask import Flask
app = 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_response
app = 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 response
if __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 json
app = 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 json
app = Flask(__name__)
@app.route("/index")
def index():
# 返回json数据的方法
data = {
"name":"zhangsan",
"age":18
}
# 第二种 jsonify帮助转为json数据,并设置响应头 Content-Type 为 application/json
return jsonify(data)
if __name__ == '__main__':
app.run(debug = True,port=5000)