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)
相关推荐
左夕5 分钟前
分不清apply,bind,call?看这篇文章就够了
前端·javascript
Zha0Zhun1 小时前
一个使用ViewBinding封装的Dialog
前端
兆子龙1 小时前
从微信小程序 data-id 到 React 列表性能优化:少用闭包,多用 data-*
前端
滕青山1 小时前
文本行过滤/筛选 在线工具核心JS实现
前端·javascript·vue.js
时光不负努力1 小时前
编程常用模式集合
前端·javascript·typescript
恋猫de小郭1 小时前
Apple 的 ANE 被挖掘,AI 硬件公开,宣传的 38 TOPS 居然是"数字游戏"?
前端·人工智能·ios
小岛前端1 小时前
Node.js 宣布重大调整,运行十年的规则要改了!
前端·node.js
OpenTiny社区1 小时前
OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用
前端·javascript·ai编程
梦想CAD控件1 小时前
在线CAD开发包结构与功能说明
前端·javascript·vue.js
张拭心1 小时前
春节后,有些公司明确要求 AI 经验了
android·前端·人工智能