文章目录
视图返回响应的三种方式
使用jsonify,生成json数据响应体
使用jsonify及是利用jsonify函数将数据转换成json格式。由于json数据需字典格式,所以需要字典格式的数据传递给他。
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def hello_world():
#定义字典,转成json返回
dic = {
'name':'xiaoming',
'age':12
}
response = jsonify(dict)
return response
if __name__ == '__main__':
app.run(debug=True)
此方法有简化形式:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def hello_world():
response = jsonify(name='xiaoming',age=12)
return response
if __name__ == '__main__':
app.run(debug=True)
使用redirect,url_for,生成文本响应体
PyCharm快速导包
redirect 同样是flask模块中的一个方法,因此我们需要导入该方法。写出redirect后可以让光标停留在单词中点击Alt + Enter 键,自动导包。
redirect导向其他地址
redirect后可以跟一个外链地址,也可以跟一个视图函数地址:
from flask import Flask
from flask import redirect
app = Flask(__name__)
# 导向视图函数地址
@app.route('/')
def hello_world():
return redirect('/xiaoming')
# 导向外链地址
@app.route('/baidu')
def baidu():
return redirect('https://www.baidu.com')
@app.route('/xiaoming')
def xiaoming():
return 'woshixiaoming'
if __name__ == '__main__':
app.run(debug=True)
url_for反解析
url_for反解析可以通过视图函数的名称,返回地址
from flask import Flask
from flask import redirect
from flask import url_for
app = Flask(__name__)
@app.route('/')
def hello_world():
# url_for("函数名"),可以打印出来"/xiaoming"
print(url_for("xiaoming"))
return redirect('/xiaoming')
@app.route('/xiaoming')
def xiaoming():
return 'woshixiaoming'
if __name__ == '__main__':
app.run(debug=True)
重定向
url_for 可以配合 redirect 使用,且可传参数:
from flask import Flask
from flask import redirect
from flask import url_for
app = Flask(__name__)
# 若地址栏传入"/xiaoming",则将重定向到name函数,并传值num='1'
@app.route('/xiaoming')
def xiaoming():
return redirect(url_for('name', num='1'))
# 若地址栏传入"/xiaohua",则将重定向到name函数,并传值num='2'
@app.route('/xiaohua')
def xiaohua():
return redirect(url_for('name', num='2'))
@app.route('/name/<path:num>')
def name(num):
if num == '1':
return '我是小明'
elif num == '2':
return '我是小华'
else:
return '我是你猜'
if __name__ == '__main__':
app.run(debug=True)
返回字符串,自定义状态码,返回文本响应体
视图函数可以直接返回字符串,也可以同时附带状态码
from flask import Flask
app = Flask(__name__)
# 字符串后可以加上状态码,也可以空格后加上状态码描述
@app.route('/')
def func():
return '这是字符串', '666 zhuangtaima'
if __name__ == '__main__':
app.run()
abort,errorhandler,异常处理
abort异常抛出
abort(code):主动抛出异常状态码
参数code:HTTP的错误状态码
例如:abort(404)抛出异常
from flask import Flask
from flask import abort
app = Flask(__name__)
@app.route('/')
def func():
abort(404)
if __name__ == '__main__':
app.run()
errorhandler捕获异常
errorhandler可以捕获异常,并返回异常信息。这个异常信息需要作为参数传给后边视图函数:
from flask import Flask
from flask import abort
app = Flask(__name__)
@app.route('/')
def func():
abort(404)
@app.errorhandler(404)
def fun(e):
print(e)
return '捕捉到了'
if __name__ == '__main__':
app.run()