钩子函数
钩子函数是指在执行函数和目标函数之间挂载的函数, 框架开发者给调用方提供一个point -挂载点, 至于挂载什么函数有我们调用方决定, 这样大大提高了灵活性。
常用的钩子函数
before_first_request
执行:
@app.before_first_request
def before_first_request():
print('这是第一次请求之前执行的')
执行结果
before_request
执行:
@app.before_request
def before_request():
print('每次请求之前调用')
执行结果:
注意点:
1.在每次调用之前运行
2.在调用时不需要函数
3.如果有一个非空的返回值,name返回值会被当做饷应。
after_reques
执行:
@app.after_request
def after_request(response):
print('在每个请求之后注册一个要运行的函数, 每次请求都会执行.')
return response
执行之后:
注意点:
1.在每次请求之后运行;
2.在调用的过程中需要传递参数,参数是一个响应对象;
3.必须要有返回值,返回值也是一个响应对象,可处理。
teardown_request
@app.teardown_request
def teardown_request(parm):
print('注册一个函数在每个请求的末尾运行,不管是否有异常, 每次请求的最后都会执行.')
return parm
总体代码如下:
from flask import Flask,request
app=Flask(__name__)#创建一个flask应用
@app.before_first_request
def before_first_request():
print('这是第一次请求之前执行的')
@app.before_request
def before_request():
print('每次请求之前调用')
@app.after_request
def after_request(response):
print('在每个请求之后注册一个要运行的函数, 每次请求都会执行.')
return response
@app.teardown_request
def teardown_request(parm):
print('注册一个函数在每个请求的末尾运行,不管是否有异常, 每次请求的最后都会执行.')
return parm
@app.route('/index',methods=['POST','GET'])#创建flask应用
def before_request():
print(request)
print(request.url)
print(request.method)
print('data',request.data)
print('form',request.form)
print('file',request.files)
files=request.files.get('file')
files.save('./static/1.png')
return 'index'
if __name__ == '__main__':
app.run(debug=True,port=5011)
cookie
from flask import Flask,make_response,request
app=Flask(__name__)
@app.route('/getcookie')
def getcookie():
print('##################')
print(request.cookies)
return '取出cookie'
@app.route('/index',methods=['POST',"GET"])
def index():
response=make_response('ok')
response.set_cookie('username','tom')
return response
if __name__ == '__main__':
app.run(debug=True,port=5001)
可注意到的是,Cookies 是设置在响应对象上的。由于通常视图函数只是返回字符串,之后 Flask 将字符串转换为响应对象。如果你要显式地转换,你可以使用 make_response() 函数然后再进行修改。
session
除请求对象之外,还有一个 session 对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名。这意味着用户可以查看你 Cookie 的内容,但却不能修改它,除非用户知道签名的密钥。
要使用会话,你需要设置一个密钥。这里介绍会话如何工作:
from flask import Flask,session,render_template
app=Flask(__name__)
app.secret_key='vsajkvakjvalkjvakjbvjaklkj'
@app.route('/getinfo')
def getinfo():
return session.get('college')
@app.route('/index',methods=['GET','POST'])
def index():
# session['college']='哈佛'
str1='python'
list1=[1,2,3]
return render_template('moban.html',str1=str1,list1=list1)
if __name__ == '__main__':
app.run(debug=True)
注意要有template文件夹,没有就创建一个。
如果想在html页面中加入东西,做法如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>这是jinja2语言的学习</h1>
{{ str1 }}<BR>
{{ list1 }}
</body>
</html>
结果如下图: