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)
相关推荐
GIS程序媛—椰子39 分钟前
【Vue 全家桶】7、Vue UI组件库(更新中)
前端·vue.js
weixin_4426434243 分钟前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
DogEgg_0011 小时前
前端八股文(一)HTML 持续更新中。。。
前端·html
ZL不懂前端1 小时前
Content Security Policy (CSP)
前端·javascript·面试
木舟10091 小时前
ffmpeg重复回听音频流,时长叠加问题
前端
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
王大锤43911 小时前
golang通用后台管理系统07(后台与若依前端对接)
开发语言·前端·golang
半桶水专家1 小时前
用go实现创建WebSocket服务器
服务器·websocket·golang
布值倒区什么name1 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug
我血条子呢1 小时前
[Vue]防止路由重复跳转
前端·javascript·vue.js