直接响应
- 直接返回响应体数据
return '字符串'
- 直接返回响应体数据加状态码
return '字符串', 状态码
- 直接返回响应体数据加状态码加响应头信息
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()