请求钩子vue
交互过程中,有些准备或者扫尾工作需要做
求开始需要请求连接,比如db连接,outh认证,
结束时,指定数据得交互格式
通过装饰器实现,
钩子的四个分类
1、@app.before_first_request
在第一次请求之前调用(处理第一个请求前执行) ,可以在内部做一些初始化操作
@app.before_first_request
def before_first_request():
print('before_first_request')
2、@app.before_request
在每次请求前执行,在某个修饰得一个函数中返回一个resp,视图函数不会被调用
@app.before_request
def before_request():
print('before_request')
3、@app.after_request
在执行完视图函数后调用,将视图函数所产生得响应传入, 在此方法中可以对响应做最后一步同意得处理
@app.after_request
def after_request(response):
print('after_request')
response.headers['Content-Type']='appline/jison'
return response
4、@app.teardown_request
在每次请求后执行,接受一个参数,错误信息,有相关错误会抛出
@app.teardown_request
def teardown_request(response):
print('teardown_request')
request
状态保持
http是一种无状态协议
无状态:用户一次请求,浏览器、服务器无法知道之前这个用户做个什么
socket与session
socket 在客户端存储的信息
session在服务端存储的信息
cookie
from flask import Flask,make_response
# make_response就是django里面的http reponse
app=Flask(__name__)
# cookie俩周后过期
@app.route('/cookie')
def set_cookie():
resp=make_response('this is to set cookie')
resp.set_cookie('username','laowang',max_age=3600)#max_age:设置cookie时间
return resp
if __name__=='__main__':
app.run()
获取cookie
#获取cookie
@app.route('/request')
def get_cookie():
resp=request.cookies.get('username')
return resp
访问http://127.0.0.1:5000/request
session
session 会话(敏感信息),
session依赖于cookie
# 设置session
@app.route('/index1')
def index1():
session['leftmoney']='66666'
return redirect(url_for('index'))
# 需要设置secret_key,用于模块hash
app.secret_key='sasdgf'
# 访问session
@app.route('/')
def index():
return session.get('leftmoney')
访问http://127.0.0.1:5000/index1
flask上下文:
上下文:相当于一个容器,保存了Flask程序运行过程中的一些信息。
1、request context 请求上下文,cookie 和session均属于请求上下文;
- request:封装了HTTP请求的内容,针对的是http请求。举例:user = request.args.get('user'),获取的是get请求的参数。
- session:用来记录请求会话中的信息,针对的是用户信息。举例:session['name'] = user.id,可以记录用户信息。还可以通过session.get('name')获取用户信息。
2、application contest 应用上下文,current_app 和g均属于应用上下文对象
- current_app:表示当前运行程序文件的程序实例。我们可以通过current_app.name打印出当前应用程序实例的名字
Manage
安装flask_script
from flask_script import Manager
from flask import Flask
app=Flask(__name__)
# Manager和app关联
manager=Manager(app)
@app.route('/')
def indef():
return 'sadfg'
if __name__=='__main__':
manager.run()
使用命令行的模式进行启动.ctrl+c退出
python demo_flask_script.py runserver -h 127.0.0.1 -p 8008
jinja2模板
参考Django,Jinja2的模板语法与Django的模板内容基本相似
语法:
- 变量取值{{ }}、
- 控制结构{% %}、
- 注释{# #}
模板创建templates
from flask import Flask,render_template
app=Flask(__name__)
@app.route('/')
def index():
my_str='帅的一批'
my_array=[i for i in range(9)]
my_int = 99
my_dict={
'name':'wanglong',
'age':20
}
return render_template('temp_demo1.html',
my_str=my_str,
my_array=my_array,
my_dict=my_dict,
my_int=my_int
)
if __name__=='__main__':
app.run()
.html文件
Title
jinja模板
昵称:{{ my_str }}
数值:{{ my_array }}
字典;{{ my_dict }}
数字:{{ my_int }}
{#运算#}
my_int + 10 = {{ my_int + 10 }}
my_int + array[0] = {{ my_int +my_array[2] }}
array[3] = {{my_array.0 }}
mydict 中 name = {{my_dict['name'] }}
mydict 中 age = {{my_dict.age}}