当前位置: 首页 > article >正文

Flask 设置session 自定义登录验证

"""
    1. 设置session
            # 设置session成功 重定向到首页
            session.permanent = True  # 设置会话过期时间
            session['info'] = username
            return redirect(url_for('index'))

    2. 获取session
            info = session.get('info', default=0)
            return render_template('index.html', info=info)

    3. 设置session会话有效期
            1. session.permanent = True  # 设置会话过期时间
            2. # 两种设置会话有效期时间方法
               # app.permanent_session_lifetime = datetime.timedelta(days=2)  # 会话有效期2天
                 app.permanent_session_lifetime = 60 * 60 * 24 * 7  # 会话有效期7天
    4. 删除session
            # 删除会话
            session.pop('info', None)
            return redirect(url_for('login'))

"""

 

 

 

 


import datetime

from flask import Flask, render_template, redirect, url_for, request, session, make_response, Response
from functools import wraps


def auth(fn):
    @wraps(fn)
    def inner(*args, **kwargs):
        if not session.get('info', None):
            return redirect(url_for('login'))
        return fn(*args, **kwargs)

    return inner


app = Flask(__name__)
app.secret_key = "ghakjhkghkahkhgkhalkfdngkasnkglhaj"
# 两种设置会话有效期时间方法
# app.permanent_session_lifetime = datetime.timedelta(days=2)  # 会话有效期2天
app.permanent_session_lifetime = 60 * 60 * 24 * 7  # 会话有效期7天
print(app.url_map)


@app.route('/')
@app.route('/index', methods=["GET", "POST"])
@auth
def index():
    # 获取会话
    info = session.get('info', default=0)
    return render_template('index.html', info=info)


@app.route('/login', methods=["GET", "POST"])
def login():
    if request.method == "POST":
        username = request.form.get('username', None)
        password = request.form.get('password', None)
        confirm_password = request.form.get('confirm_password', None)
        if not username or not password or not confirm_password:
            return render_template('login.html', errors="不能为空")
        elif not username:
            return render_template('login.html', errors="用户名有误")
        elif password != confirm_password:
            return render_template('login.html', errors="密码不一致")
        elif username == "root" and password == "123":
            # 设置session成功 重定向到首页
            session.permanent = True  # 设置会话过期时间
            session['info'] = username
            return redirect(url_for('index'))
    else:
        return render_template('login.html', errors="账号或密码有误")

    return render_template('login.html')


@app.route('/logout', methods=["GET", "POST"])
@auth
def logout():
    # 删除会话
    session.pop('info', None)
    return redirect(url_for('login'))


@app.route('/test')
@auth
def test():
    return "测试"


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

 


http://www.kler.cn/news/314661.html

相关文章:

  • 提前解锁 Vue 3.5 的新特性
  • Prometheus监控k8s环境构建
  • 『 Linux 』HTTP(一)
  • mongoDB 读取数据python版本实现
  • DOS(Disk Operating System,磁盘操作系统)常用指令
  • idea 中MyBatisX插件没有出现蓝色鸟
  • 蚂蚁数字科技-数科技术部-测试开发专家(中间件)
  • 【Elasticsearch系列十八】Ik 分词器
  • murmur 算法
  • MySQL(日志)
  • 未来视界,触手可及:bigmp4 引领 AI 视频处理新革命
  • pytorch的动态计算图机制
  • 华为HarmonyOS地图服务 4 - 通过“地图相机“控制地图的可见区域
  • C语言中易混淆概念的关键字
  • Vue+nodejs+express旅游景区门票预订网站的设计与实现 8caai前后端分离
  • MyBatis操作数据库-XML实现
  • MySQL5.7主从复制集群如何配置半同步复制
  • asp.net core调用wps实现word转pdf的方法
  • Python Selenium 自动化爬虫 + Charles Proxy 抓包
  • 十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明
  • 掌握 JavaScript 中的函数表达式
  • 页面布局实现-左侧横向滑动展示隐藏数据,右侧固定展示操作按钮。可上下滑动联动
  • 常用的图像增强的算法之间的联系和区别
  • Python3网络爬虫开发实战(17)爬虫的管理和部署(第一版)
  • Samba服务
  • 传统到AI 大数据分析的演变,颠覆智慧水电的未来?
  • 【JavaEE初阶】多线程(4)
  • 2024/9/21黑马头条跟学笔记(十)
  • Ubuntu 安装和使用 Fcitx 中文输入法;截图软件flameshot
  • 从零到一:打造安全高效敦煌测评自养号体系