Flask——请求钩子/状态保持

请求钩子

为什么要有这个请求钩子出现呢?
在客户端和服务端的数据交互的过程中,有些准备工作或扫尾工作需要处理,比如
	在请求开始时,建立数据库连接;
	在请求开始时,根据需求进行权限校验;
	在请求结束时,指定数据的交互格式;
	为了让每个视图函数避免编写同样的代码,Flask提供了通用设施的功能,即请求钩子。
	请求钩子是通过装饰器实现的,Flask支持如下四种请求钩子:
		before_first_request(在处理第一个请求前执行)
		brdore_request(在每次请求前执行,如果在某修饰函数中返回了一个响应,视图函数将不再被调用)
		after_request(如果没有抛出异常,在每次请求后执行;接受一个参数:视图函数做出的响应(response);在此函数中可以对响应值在返回之前进行进一步的修改;需要将参数中的响应在此函数中返回)
		teardown_request(在每次请求后执行;接收一个参数:错误信息(e)同errorhandler,如果有相关异常抛出)
		注意:这个异常是指代码本身错误(代码中出现10/0)不执行,如果abort抛出异常了,after_request还是会执行。

状态保持

因为http是一种无状态的协议,基于套接字(socket),浏览器请求服务器是无状态的。无状态:就是指一次用户请求之后,浏览器服务器无法知道这个用户做过什么,每次请求都是一次新的请求。但是,我们在实际的开发过程中,需要记录用户是否登陆过,以及浏览过那些商品之类的需求。
	实现状态保持有两种方式:
		在客户端存储信息使用Cookie;
		在服务器端存储信息使用Session;
	两种都是基于键值对的字符串,服务器生成Cookie信息,都存储在浏览器当这个。而服务器生成Session信息,key存储在浏览器中,value存储在服务器中。

Cookie设置和获取:

	from flask import Flask,make_response,request
	
	app = Flask(__name__)
	
	# Cookie有一个同源策略,百度给的京东拿不到。 
	# 设置Cookie
	@app.route('/')
	def index():
	    response = make_response('set cookie success')
	    # 设置Cookie,设置有效期,单位是秒。
	    response.set_cookie('name','wax',max_age = 360)
	    # 返回响应
	    return response
	# 在浏览器的set_cookie:name = wax,path = /    这个路径path就是浏览器的这个cookie允许的域
	# 获取Cookie
	@app.route('/get')
	def get_cookie():
	    name  = request.cookies.get('name')
	    return name

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

Session的设置和获取

	from flask import Flask,session
	
	app = Flask(__name__)
	# 设置密钥
	app.config['SECRET_KEY'] = 's9H/oDtK/s5gbddabV2aMjFb4AHrbNwR7nRl7y4WvDmZwDHdAFRsHw=='
	
	# 设置Session,设置session要求会话安全。需要设置一个密钥。
	@app.route('/')
	def set_session():
	    session['name'] = 'wax'
	    return 'set session success'
	
	
	if __name__ == '__main__':
	    app.run()

	设置session的时候如何选择一个合适的密钥,如何去寻找这个合适的安全的字符串呢,使用base64这个编码工具:
	import os,base64
	a = os.urandom(40)
	base64.b64encode(a)

猜你喜欢

转载自blog.csdn.net/weixin_43617255/article/details/83826749