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