Flask视图函数相关

视图返回响应的三种方式

使用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()

猜你喜欢

转载自blog.csdn.net/washing1127/article/details/84323246