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

Flask》》flask-login

# 安装 pip install flask-login

# 初始化配置fromflask import Flaskfromflask_login importLoginManagerapp=Flask(__name__)# 1. 必须配置一个强密钥,用于加密 session 等[reference:7]# 提示:生成 secret key 的命令行示例:python -c 'import secrets; print(secrets.token_hex())'[reference:8]app.config['SECRET_KEY']='在此生成一个随机字符串'# 2. 实例化并初始化 LoginManagerlogin_manager=LoginManager()login_manager.init_app(app)# 3. (可选) 配置登录页和消息[reference:9]login_manager.login_view='login' # 未登录时跳转到的登录视图函数名 login_manager.login_message='请先登录以访问此页面。' # 自定义提示信息 login_manager.login_message_category='info'# 创建用户模型fromflask_sqlalchemy import SQLAlchemyfromflask_login import UserMixinfromwerkzeug.securityimportgenerate_password_hash,check_password_hashdb=SQLAlchemy(app)# 继承 UserMixin# 不必在每个模型里重复编写 is_authenticated、is_active、is_anonymous、get_id 这四个几乎永远一样的实现。classUser(UserMixin,db.Model):__tablename__='users' id=db.Column(db.Integer,primary_key=True)username=db.Column(db.String(80),unique=True,nullable=False)password_hash=db.Column(db.String(256),nullable=False)defset_password(self,password):"""使用 werkzeug 生成安全的密码哈希""" self.password_hash=generate_password_hash(password)defcheck_password(self,password):"""验证用户输入的密码是否与哈希匹配"""returncheck_password_hash(self.password_hash,password)## 实现用户加载回调@login_manager.user_loaderdefload_user(user_id):# Flask session 中存的是字符串,需要转换为整数再查询数据库[reference:12]returnUser.query.get(int(user_id))## 登录视图 (Login View)fromflaskimportrender_template,redirect,url_for,flash,requestfromflask_loginimportlogin_user,logout_user# 假设你使用 Flask-WTF 创建了一个 LoginForm 表单fromforms importLoginForm@app.route('/login',methods=['GET','POST'])deflogin():form=LoginForm()ifform.validate_on_submit():user=User.query.filter_by(username=form.username.data).first()ifuseranduser.check_password(form.password.data):# 1. 核心函数:执行登录,如果勾选了"记住我",传递 remember=True[reference:14]# 手动调用的函数,用于将登录成功的用户信息写入sessionlogin_user(user,remember=form.remember_me.data)# 2. 登录成功后,重定向到用户原本要访问的页面,如果没有则跳转到主页[reference:15]next_page=request.args.get('next')ifnext_page:returnredirect(next_page)flash('登录成功!','success')returnredirect(url_for('index'))else:flash('用户名或密码错误','danger')returnrender_template('login.html',form=form)## 登出视图 (Logout View)@app.route('/logout')deflogout():logout_user()flash('您已成功登出。','info')returnredirect(url_for('login'))## 保护视图与访问用户#### 使用 @login_required 装饰器来保护任何需要登录才能访问的页面fromflask_login importlogin_required@app.route('/dashboard')@login_requireddefdashboard():# 只有登录用户才能进入此视图return"这是您的个人控制面板。"# 在所有视图和模板中,都可以通过 current_user 这个全局代理访问当前用户对象fromflask_login importcurrent_user@app.route('/profile')@login_requireddefprofile():# 直接使用 current_user 获取用户信息returnf"欢迎回来, {current_user.username}!"<!DOCTYPE html><html><head><title>我的应用</title></head><body><nav><!--使用 is_authenticated 判断用户状态,动态显示不同的导航菜单[reference:19]-->{%ifcurrent_user.is_authenticated%}<ahref="#">欢迎,{{current_user.username}}</a><ahref="{{ url_for('logout') }}">登出</a>{%else%}<ahref="{{ url_for('login') }}">登录</a><ahref="{{ url_for('register') }}">注册</a>{%endif%}</nav>{%block content%}{%endblock%}</body></html>

user_loader 调用时机

http://www.cnnetsun.cn/news/2068477.html

相关文章:

  • YOLOv9中的GELAN到底强在哪?对比YOLOv5/v8网络结构,带你重新理解‘高效’设计
  • 别再被老视频的‘毛边’困扰了!手把手教你用TW9912芯片搞定去隔行(附配置避坑)
  • 漏洞复现--Huawei-Auth-HTTP-Server-1.0-任意文件读取漏洞深度剖析
  • 告别臃肿模拟器!Windows直接运行安卓应用的4步革命方案
  • 别再瞎卷了!用Yerkes-Dodson法则找到你的最佳工作状态(附实用压力自测表)
  • FanControl终极指南:5步搞定Windows风扇控制,打造静音高效散热系统
  • 告别电脑!用安卓手机上的Termux配置Nginx+SSH,随时随地管理你的轻量级Web服务
  • 终极指南:5分钟快速恢复加密压缩包密码的完整方案
  • BERT命名实体识别实战:从原理到工业级部署
  • PVC卡企业
  • 别再只懂RGB了!用OpenCV和C++手把手实现Lab、YCbCr、HSV色彩空间转换(附完整代码)
  • 从业多年总结:时序数据库到底该怎么选?全维度选型避坑指南
  • 暗黑破坏神2存档编辑器完全指南:5分钟轻松修改角色与装备
  • 告别玄学调参!手把手教你用WGCNA分析RNA-seq数据(附R代码与避坑指南)
  • 从π到Ω:解锁技术文档与学术写作中的数学符号高效应用指南
  • PyTorch实战:基于ResNet50的特征图与热图可视化,深入理解卷积神经网络‘看’世界的方式
  • CODE项目揭秘:一名操作员如何指挥无人机蜂群执行复杂任务?
  • PointPillars凭什么又快又准?深入源码,拆解其‘伪图像’生成与2D卷积的GPU加速魔法
  • 3步找回遗忘的压缩包密码:ArchivePasswordTestTool终极恢复指南
  • LabVIEW切削力测量虚拟仪器
  • 从旅行商问题到排班优化:量子退火算法中的约束条件实战指南
  • 用E4A中文编程,30分钟搞定一个能远程控制STM32的安卓APP(基于OneNET MQTT)
  • 原神帧率限制解除方案的技术实现与性能优化
  • 5分钟快速上手:QtScrcpy安卓投屏的终极指南
  • 别乱删!用ADB管理华为预装应用的进阶技巧:禁用、恢复与包名侦查实战
  • 5分钟打造你的专属Obsidian个性化首页:从零开始构建高效知识管理中心
  • Python智能体建模革命:Mesa框架如何让复杂系统仿真变得简单?
  • 保姆级教程:在Ubuntu 22.04上离线安装并配置Chrony,搞定局域网内多台服务器时间同步
  • 告别手动MD12:教你写一个智能的SAP计划订单自动处理程序(基于BAPI_PLANNEDORDER_CHANGE/DELETE)
  • 如何永久保存你珍爱的B站视频?m4s转MP4完整教程