首页 > 其他分享 >flask 登录

flask 登录

时间:2024-10-17 17:22:36浏览次数:8  
标签:__ return 登录 flask auth user login password

#!/usr/bin/env python
# encoding: utf-8
#pip install flask-login
import datetime
from flask import Flask, Blueprint,session, redirect, url_for, render_template, request
from flask_login import LoginManager,current_user, login_user, login_required, logout_user
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash


class User(UserMixin):
    username = None

    def __init__(self,id,username,password_hash):
        self.id = id
        self.username = username
        self.set_password(password_hash)

    def get_id(self):
        return self.id
        
    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def validate_password(self, password):
        return check_password_hash(self.password_hash, password)

UserData = {
        1 : User(
            id=1,
            username='admin',
            password_hash = 'admin'
        )
    } 
 
app = Flask(__name__)
 
app.secret_key = 's3cr3t'
login_manager = LoginManager()
 
# 设置不同的安全等级防止用户会话遭篡改,属性可以设为None、basic或strong
# 设为 strong 时,Flask-Login 会记录客户端 IP 地址和浏览器的用户代理信息,如果发现异动就登出用户
login_manager.session_protection = 'strong' 
 
# 如果未登录,返回的页面
login_manager.login_view = 'auth.login'
login_manager.init_app(app)
 
# Flask-Login 要求程序实现一个回调函数,使用指定的标识符加载用户
@login_manager.user_loader
def load_user(user_id):
    return UserData.get(user_id)

 
auth = Blueprint('auth', __name__)


# 登录
@auth.get('/login')
def login():
    if current_user.is_authenticated: #判断当前用户是否是登录状态
        return redirect(url_for('auth.index'))
    html ='''<!DOCTYPE html><html><head>
    <meta charset="utf-8"> 
    <title>登录页面</title> 
</head><body>
<form action="/auth/login" method="post">
        <!-- 文本输入框 -->
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username" required><br>
        <!-- 密码输入框 -->
        <label for="password">密码:</label>
        <input type="password" id="password" name="password" required><br>
        <!-- 提交按钮 -->
        <input type="submit" value="提交">
    </form>
</body>
</html>'''
    return html

# 登录
@auth.post('/login')
def login_post():
    try:
        req = request.form
        username = req.get('username')
        password = req.get('password')
        user = UserData.get(1)
        print(username,password)
        if not user:return '不存在的用户'
        if username == user.username and user.validate_password(password):
            duration = datetime.timedelta(seconds=30*60) # 30*60秒
            remember = True
            # login_user(user, remember=remember) # 登录
            login_user(user)  # 创建用户 Session
            # return "ok"
            return redirect(request.args.get('next') or url_for('auth.index'))
        else:
            return "密码不正确"
    except Exception as e:
        print(e)
        return "error"
 
 
# 通过Flask-Login提供的login_required装饰器来增加路由保护,如果未认证用户访问这个路由,Flask-Login会将这个请求发往登录页面
@auth.route('/logout', methods=['GET', 'POST'])
@login_required
def logout():
    logout_user()
    return redirect(url_for('auth.login'))
 
 
# test method
@app.get('/')
@auth.get('/index')
@login_required
def index():
    return "<h1>This is the first page</h1><h4><a href='/auth/login'>登录</a></h4><a href='/auth/logout'>退出登录</a>"
 
if __name__ == "__main__": 
    app.register_blueprint(auth, url_prefix='/auth')
    app.run(debug=True,host='0.0.0.0',port=8080)

  

 

标签:__,return,登录,flask,auth,user,login,password
From: https://www.cnblogs.com/boye169/p/18472724

相关文章

  • python+flask框架的地震救灾小程序前台8(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景地震作为自然灾害之一,其突发性和破坏性给人类社会带来了巨大的生命和财产损失。当前,关于地震救灾的研究主要集中在地震预警技术、灾后救援......
  • python+flask框架的党建appapp8(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展,党建工作也逐渐向数字化、智能化方向转型。关于党建信息化的研究,现有研究主要以传统党建模式与信息技术的融合为主......
  • python+flask框架的代驾小程序设计与实现实现18(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着城市化进程的加速和交通安全意识的提升,代驾服务逐渐成为人们日常生活中不可或缺的一部分。特别是在饮酒后或长途驾驶疲劳时,代驾服务为......
  • python+flask框架的大学校园宿舍微信报修小程序小程序 38(开题+程序+论文) 计算机毕业
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展和智能手机的普及,微信作为国内最大的社交平台之一,其小程序功能已成为连接线上与线下的重要桥梁。在大学校园中,宿舍......
  • 使用 Dart 实现验证码识别与自动化登录
    安装所需依赖我们将使用以下依赖:http:用于发送HTTP请求,下载验证码图片。image:用于图像处理(如灰度化等操作)。TesseractOCR:通过系统调用Tesseract进行验证码识别。首先,确保在你的系统中安装了TesseractOCR,可以通过包管理器安装:bashsudoaptinstalltesseract-ocr然......
  • python+flask框架的大学生创新实验室设备资产管理系统小程序端8(开题+程序+论文) 计算
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景在当前高等教育环境中,大学生创新实验室作为培养学生实践能力和创新思维的重要平台,其设备资产管理的高效性和准确性显得尤为重要。然而,现有......
  • python+flask框架的传智健康医疗项目设计与实现(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展,健康医疗行业正经历着前所未有的变革。关于健康医疗信息化的研究,现有研究主要以电子病历系统、远程医疗服务以及医......
  • python+flask框架的传智健康医疗项目设计与实现(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展和人口老龄化的加剧,健康医疗行业正经历着前所未有的变革。当前,国内外关于健康医疗信息化的研究主要集中在医疗信息......
  • python+flask框架的城固一中学生信息管理系统的设计与实现(开题+程序+论文) 计算机毕
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景在当前信息化时代背景下,学校信息管理系统的建设已成为提升教育管理水平、优化资源配置、提高教学效率的重要手段。关于学生信息管理系统的......
  • 网站后台登录密码忘记了怎么办
    如果忘记了网站后台的登录密码,可以按照以下步骤尝试找回或重置密码:查看邮箱:如果你在注册或初次设置后台账号时绑定了邮箱,通常可以通过点击“忘记密码”链接,系统会向你的邮箱发送一封包含重置密码链接的邮件。联系管理员:如果你没有绑定邮箱或者无法访问绑定的邮箱,那么联系网......