abort()函数可以立即终止视图函数的执行,并返回前端特定的信息,其方法可分为两种:
状态码(必须是标准的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)
使用这种方式需要导入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)
在默认的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方法来构造响应体信息,以下来进行描述:
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)

状态码的设置可以进行修改,同时也可进行提示语的标注(不可添加中文,会报错),例如:
return ("index page", "404 hello" ,[("itcast","python"),("city","shenzhen")])
这里要先导入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)
在Flask中直接返回list或dict是不行的
HTTP返回json格式数据主要有两个方面:
数据本身为json格式;
Content-Type声明为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)
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)