flask学习02

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设置过期时间
# 允许session设置过期时间  默认不允许   如果允许, 默认过期时间为31天
session.permanent = True

# 设置session的过期时间
app.permanent_session_lifetime = timedelta(hours=1)
  • session删除数据
 # 删除session数据  类似字典的操作  设置默认值后, 即使key不存在, 也不会报错
session.pop("username", None)
  • flask中默认的session机制
默认会将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传值只能关键字传参)
  • 配置方式:
    • 从对象中加载
      1. 创建对象`class Config:

    定义和配置同名的类属性

    DEBUG = True2. 导入对象app.config.from_object(Config)`
    • 从py文件中加载配置
      1. 在当前文件夹创建配置文件config.py# 定义和配置同名的全局变量 DEBUG = True
      2. 导入文件app.config.from_pyfile('config.py')
    • 从环境变量中加载配置
      在这里插入图片描述
      在这里插入图片描述
      3.导入环境变量app.config.from_envvar('ENV_CONFIG')
  • 整体代码
    在这里插入图片描述

四、脚本启动

  • 作用:为的是在服务器终端更好的运行web服务器
  • 优点:在命令窗口可灵活更改IP和端口。。
  • 在命令端运行程序
    1. 启动脚本组件的安装
      在这里插入图片描述
    2. 创建管理器
      在这里插入图片描述
    3. 终端运行可修改IP和端口的命令
      在这里插入图片描述
    • 注意一定要在本环境本文件下安装
  • 在pycharm运行程序
    1. 创建管理器
    2. 设置环境参数
      • 作用:一般为了解决在启动文件前进行传参行为
      • 在pycharm运行runserver
        在这里插入图片描述
    3. 直接运行
  • 拓展:杀死端口
    在这里插入图片描述

五、模板

1.模板渲染

  • 就是对html进行内容替换:flask中提供了jinjia2框架来实现模板渲染 底层也是正则表达式

2.jinjia2模板渲染步骤

  1. 将模板文件放入模板文件夹,标示模板文件夹并设置模板语言
    • 模板设置
      在这里插入图片描述
    • 模板语言设置
      在这里插入图片描述
  2. 使用render_template函数来进行模板渲染,将需要进行替换的内容设置为模板变量(关键字实参)html_str = render_template('baidu.html', city=city_name)
  3. 在html中使用模板变量进行内容替换
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值