flask-blueprint插件-接收请求参数-cookie&session

爱乐邦
2023-12-01

1. 蓝图插件(blueprint)

安装:pip install flask-blueprint
作用:将不同功能的模块进行拆分,实现应用模块化
使用步骤:1. 创建app 实例,
				  2 .创建蓝图对象  
				  3. 使用app实例注册蓝图对象
注意: 使用 url_for() 反向解析 使用蓝图对象.视图函数
# 导包省略
# blue_manmager.py
app = create_app()
manager = Manager(app)
if __name__ == "__main__":
	manager.run()
	
# __init__.py
def create_app():
	app = Flask(__name__)
	# 注册蓝图 到app
	app.register_blueprint(music_blue)
	return app
# music_views.py
# 实例化蓝图对象
music_blue = Blueprint("musicblue",__name__)

@music_blue.route("/listen/")
def listen_music_view():
	return redirect(url_for("music_blue.sing_view"))
	
@music_blue.route("/sing/")
def sing_view():
	return "<h3>唱歌...</h3>"

2. 接收请求参数

2.1 查询字符串(?使用URL与参数隔开)

单个参数:request.args.get("参数名","默认信息")
多个参数:  request.args.getlist("参数名")
@blue.route("/args/".methods=["GET","POST"])
def args_view():
	# 获取 ?后面的查询参数 name
	name = request.args.get("name")
	# 获取 ?后面的查询参数 hobby 有多个
	hobbies = request.args.getlist("hobby")
	print(type(hobbies),hobbies)
	return "name 参数:" + name 

2.2 接收到请求体(body)中的参数

request.form.get("参数名","默认信息")  
request.form.getlist(参数名)
@blue.route("/form/",methods=["post"])
def form_view():
	# 获取请求体中的name 参数
	name = request.form.get("name")
	# 获取请求体总 的hobby 参数
	hobbies = request.form.getlist("hobbby")
	print(type(hobbies),hobbies)
	return "name参数" + name

3. Cook&Session

3.1 Cookie

Cookie 生成与服务端,保存与客户端的信息
作为请求头(request header)信息的一部分,每次发送请求都会携带Cookie到服务端
Cookie 操作:
	1. 添加: 响应对象.set_cookie("cookie","Cookie值",max_age=Cookie保存秒数)
	2. 删除Cookie: 响应对象.delete_cookie(cookie名称)
	3. 查看所有Cookie: request.cookies   返回是字典
	4. 查看某个Cookie: request.cookie.get("Cookie名称","default提示")
cookie_blue = Blueprint("cookieblue",__name__)

@cookie_blue.route("/addcookie/")
def add_cookie_view():
	response = make_response("Cookie创建完毕!")
	response.set_cookie("fruit","apple",max_age=60)
	response.set_cookie("sport","football")
	reutrn response

@cookie_blue.route("/delcookie/<name>")
def del_cookie_view(name):
	response = make_response("名称为"+ name + "的Cookie已经删除")
	response.delete_cookie(name)
	return response

@cookie_blue.route("/cookie/<name>/")
def get_cookie_view(name):
	cookie_value = request.cookies.get(name,"没有该Cookie")
	return "名称为" + name + "Cookie的值为:" + cookie_value

@cookie_blue.route("/cookies/")
def get_all_cookies():
	cookies = request.cookies
	for k,v in cookies.items():
		html += k
		html += "========>"
		html += v
		html += "<br/>"
	return html

3.2 Session

Session分类: 
	1. server side session  (session 信息存储于服务器端)
		客户端通过 sessionid 值的那个cookie 与服务端的 session 信息进行匹配
	2. client side session   ( session 信息保存与客户端)
		Flask  默认信息保存与客户端	

Session出现的原因:http 协议是一种 “无状态” 协议,服务端无法判断多次请求是否
	来自同一个客户端,为了弥补 http 的 “无状态” 特性,使用会话 “Session” 机制,记	
	录不同的客户端。

3.2.1 flask的Session 操作

1. 设置Session 的秘钥
	程序实例.secret_key = '秘钥'
	程序实例.config["SECRET_KEY"] = '秘钥'

2.Session 添加数据
	session["属性名"] = 属性值

3.删除session的某个属性
	session.pop(session的属性名,"default")

4.清空session
	session.clear()
	
5. 遍历session
	session.items()

6. 根据属性名查看Session
	session.get("属性名","default")

3.2.2 Flask-Session插件

作用: 给Flask应用添加服务端Session(Sever-side-Session)的支持
安装: pip install Flask-Session
常用配置:
	SESSION_TYPE = "redis"  设置Session 的存储类型
	SESSION_REDIS = redis.Redis(host='session所在主机',port=端口,db=数据库索引)
	SESSION_KEY_PREFIX = "设置的前缀"
	PERMANENT_SESSION_LIFETIME = timedelta(seconds=30)  最大不交互时间 
app flask程序实例 与Session 关联
	from flask_session import Session
	Session(app)
Cookie 与Session 的关系:
	服务端保存了session的具体数据:
		session 的属性名和对应的属性值,
			sessionid(session 唯一标志) 一式两份,一份存储于服务端,另一份存储于客户端Cookie,每次客户端发送请求是,都会携带者sessionid去查找服务端对应的sessionid是否存在,如果存在,就属于这个session会话

session_blue = Blueprint("sessionblue",__name__)

@session_blue.route("/addsession/")
def add_session_view():
	session["username"] = "tom"
	session["password"] = "123456"
	session["email"] = "tom@163.com"
	return "session数据添加完毕"

@session_blue.route("/pop/<name>")
def pop_session_view(name):
	value = session.pop(name,"Session中已经无此属性")
	return "弹出的Session属性值是:" + value

@session_blue.route("/session/<name>")
def session_value(name):
	value = session.get(name,"无此session属性")
	return "session的属性名为" + name + ":属性值为:" + value

@session_blue.route("/clear/")
def session_clear():
	session.clear()
	return "session已经清空"

@session_blue.route("/sessions/")
def sessions_data():
	sessions = session.items()
	html = ""
	for k,v in sessions:
		html += k
		html += "======>"
		html += v
		html += "<br/>"
	return html

 类似资料: