flask学习02
一、状态保持
cookie细节
- 一旦保存了cookie数据, 访问该网站的任意路由时, cookie数据都会被发送
- 同源策略: cookie数据只会发送给生成该cookie的网站
- cookie通过js也可以存取
session实现(重点)
- 特点
- 数据保存在服务端(一般放在服务器的数据库中)
- session依赖cookie机制
- 场景
- session交互流程图
- 代码示例:
- 登录流程
- session记录用户数据
- 完整代码
from datetime import timedelta
from flask import Flask, request, redirect, url_for, session
app = Flask(__name__)
# 设置应用秘钥 用于对cookie中的sessionid进行加密
app.secret_key = "1sbwMr9SvmBCUUjHham/AQjWdZtEGPSARrNdclihFb1NrOpAT1LlQA=="
# 设置session的过期时间
app.permanent_session_lifetime = timedelta(hours=1)
# 首页
@app.route("/")
def index():
# 取出session中的数据
username = session.get("username")
if username: # 已经登录, 显示用户名
# 删除session数据 类似字典的操作 设置默认值后, 即使key不存在, 也不会报错
# session.pop("username", None)
return "欢迎回来, %s" % username
else: # 没有登录,显示"首页"
return "首页"
# 一个路由完成两项工作: GET 展示页面 POST 获取表单提交的数据
@app.route('/login', methods=['GET', 'POST'])
def login():
# 判断 本次请求的方式
if request.method == 'GET': # GET 展示页面
with open("login.html") as f:
html_str = f.read()
return html_str
# POST 提交数据
username = request.form.get('username')
password = request.form.get('password')
if username == "zs" and password == '123':
# 允许session设置过期时间 默认不允许 如果允许, 默认过期时间为31天
session.permanent = True
# 登录成功, 使用session记录用户的数据 类字典对象
session["username"] = username
# 登录成功, 重定向到首页
return redirect(url_for("index"))
else:
return "登录失败"
if __name__ == '__main__':
app.run(debug=True)
session细节
base64.b64encode(os.urandom(40))
# 允许session设置过期时间 默认不允许 如果允许, 默认过期时间为31天
session.permanent = True
# 设置session的过期时间
app.permanent_session_lifetime = timedelta(hours=1)
# 删除session数据 类似字典的操作 设置默认值后, 即使key不存在, 也不会报错
session.pop("username", None)
默认会将session数据加密后保存到cookie中, 和传统的session存储机制(数据保存到服务器的数据库中)不同
- 提示不识别
二、高级处理
1.上下文
2.请求钩子
3.路由变量
- 绑定动态URL
- 为的是防止给过多用户建立同样的视图函数,减少服务端的压力
- 正则转换器
- 作用:对用户请求的URL进行过滤
三、参数与配置
1.flask参数
- 导入名称:如果使用__name__会默认在当前文件环境进行查找相关文件,如果你设置其他名字就有可能跳到其他同名文件下陌生的目录,就会找不到你想要的文件。
- static_folder:
- 格式:static_folder=“static”
- 作用:用于设置静态文件的存储路径
- static_url_path:
- 格式:static_url_path=“自定义文件路径”
- 作用:用于设置静态文件的url访问方式
- template_folder:
- 格式:template_folder=“templates”
- 作用:用于设置模板文件的存储路径
2.flask应用配置
- config:设置应用的配置 父类是dict(因为父类是dict传值只能关键字传参)
- 配置方式:
- 从对象中加载
- 创建对象`class Config:
定义和配置同名的类属性
DEBUG = True2. 导入对象
app.config.from_object(Config)`
- 从py文件中加载配置
- 在当前文件夹创建配置文件config.py
# 定义和配置同名的全局变量 DEBUG = True
- 导入文件
app.config.from_pyfile('config.py')
- 从环境变量中加载配置
3.导入环境变量app.config.from_envvar('ENV_CONFIG')
- 整体代码
四、脚本启动
- 作用:为的是在服务器终端更好的运行web服务器
- 优点:在命令窗口可灵活更改IP和端口。。
- 在命令端运行程序
- 启动脚本组件的安装
- 创建管理器
- 终端运行可修改IP和端口的命令
- 在pycharm运行程序
- 创建管理器
- 设置环境参数
- 作用:一般为了解决在启动文件前进行传参行为
- 在pycharm运行runserver
- 直接运行
- 拓展:杀死端口
五、模板
1.模板渲染
- 就是对html进行内容替换:flask中提供了jinjia2框架来实现模板渲染 底层也是正则表达式
2.jinjia2模板渲染步骤
- 将模板文件放入模板文件夹,标示模板文件夹并设置模板语言
- 模板设置
- 模板语言设置
- 使用render_template函数来进行模板渲染,将需要进行替换的内容设置为模板变量(关键字实参)
html_str = render_template('baidu.html', city=city_name)
- 在html中使用模板变量进行内容替换