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'))

"""

python 复制代码
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)
相关推荐
崔庆才丨静觅9 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60619 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了10 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅10 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅10 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
七夜zippoe10 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥10 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
崔庆才丨静觅10 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment10 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅11 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端