【Flask】(三)响应

直接响应

  1. 直接返回响应体数据
    return '字符串'
  2. 直接返回响应体数据加状态码
    return '字符串', 状态码
  3. 直接返回响应体数据加状态码加响应头信息
    return '字符串', 状态码, {'key':'value'}

json数据响应

修改视图函数:

def hello_world():
    dict = {
        'action': 'hello',
        'name': 'world'
    }
    return jsonify(dict)

注意要导入jsonify模块:from flask import jsonify

jsonify()函数的作用就是将一个字典dict转化为json数据。

redirect重定向

@app.route("/baidu")
def baidu():
    return redirect("http://www.baidu.com")

注意要导入redirect模块:from flask import redirect

这里当用户用/baidu进行访问时,服务器会帮他直接定向到上面的网址处。

url_for

上面我们说到redirect函数可以重定向到另外一个页面,但是那个页面并不知道我们是从何处过来的,它认为我们仅仅是从浏览器中输入它的网址进行访问。那么如何告诉重定向的页面我们是从哪个路由访问到它的呢?这里就需要用到url_map函数,它的作用是反解析路由。
格式:url_for("视图函数")
示例:

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return redirect(url_for("baidu", token=1))

@app.route('/jingdong')
def jingdong():
    return redirect(url_for("baidu", token=2))

@app.route('/baidu/<int:token>')
def baidu(token):
    if token == 1:
        return 'from index to baidu'
    elif token == 2:
        return 'from jingdong to baidu'

if __name__ == '__main__':
    app.run()

注意使用重定向的视图函数和被定向到的视图函数是怎么写的,如何传参。

错误响应

当我们使用错误的路由进行访问时,如何返回自定义的错误信息呢?这时候就需要使用到abort函数来返回错误代码,并用errorhandler来捕捉这个异常。
示例:

@app.route('/error')
def error():
    abort(404)   # from flask import abort

@app.errorhandler(404)
def page_not_found(e):
    print(e)
    return ('页面找不到')

注意这里的404异常不一定是abort抛出的,其他路由错误产生的404异常也会返回“页面找不到”的错误信息。

request请求参数

用于返回用户请求时的各种信息,如用户的请求参数、请求方式和请求地址等。
示例:

@app.route('/')
def index():
    print(request.method)   # from flask import request
    print(request.url)
    print(request.args)   #返回请求参数字典
    return redirect(url_for("baidu", token=1))

在浏览器输入127.0.0.1:5000?name=mike&age=20进行访问

返回结果:
在这里插入图片描述
如果要取出字典中的某一个参数:

print(request.args.get('age', 100))

如果取不到会返回一个默认值100,如果这里没有写100就返回None

请求钩子

直接上例子:

from flask import Flask

app = Flask(__name__)
# before_first_request装饰的函数在第一次访问的时候执行,里面适合做初始化操作,比如io文件的读写等
@app.before_first_request()
def before_first_request():
    print('before first request')
# before_request,每次请求前都会执行,适合对参数做校验,或者对访问人数进行一个统计
@app.before_request()
def before_request():
    print('before request')
# after_request,视图函数执行之后,返回该方法,适合对返回值进行统一的处理,比如返回统一的json数据格式
@app.after_request()
def after_request(t):
    print('after request')
    # t.headers["Content-Type"] = "application/json"
    return t
# teardown_request,请求销毁之后执行,适合做异常信息统计
@app.teardown_request()
def teardown_request(e):
    print(e)
    print('teardown request')

@app.route('/')
def index():
    return 'hello world'

if __name__ == '__main__':
    app.run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值