flask不使用flask-login插件

由于flask版本升级问题,flask-manager里面的Command命令高版本不支持,低版本的兼容flask-sqlalchemy启动也会报错,第三方插件有很多问题,所以痛定思痛决定放弃使用这个,使用flask自带语法自己写一个

类似于django继承django.contrib.auth.User一样

request.user全局一样,可以获取到用户信息

python 复制代码
#钩子函数(hook),意思是在正常执行过程中插入一个东西进来,然后先执行我这个东西,再执行其他的
#钩子函数的装饰器 before_request
@app.before_request#before_request一个装饰器
def my_before_request():
    user_id = session.get("user_id")
    if user_id:
        user = UserModel.query.get(user_id)#登录之后才会得到这个user_id,否则为none
        setattr(g, "user", user)#把user绑定到一个全局对象g上去,全局变量g设置一个属性"user"值为user
    else:#如果没有这个user,也设置一下,防报错
        setattr(g, "user", None)

@app.context_processor#上下文处理器,在每个页面都能显示当前用户
def my_context_processor():
    return {"user": g.user}#返回的数据在所有的模板当中都可以使用

dectorators.py

python 复制代码
from functools import wraps
from flask import g, redirect, url_for

def login_required(func):
    @wraps(func) # 保留func的信息
    def inner(*args, **kwargs):#函数func可能会传入参数,所以给inner添加(*args, **kwargs),代表可能要传入的参数的所有可能,
        if g.user:#如果有值(登录了,有user)就正常执行相应的路由函数
            return func(*args, **kwargs)
        else:#如果没有值就跳转到当前页面
            return redirect(url_for("auth.login"))
    return inner

使用全局变量和上线文方式读读取用户信息

python 复制代码
 context_processor(上下文处理器钩子函数)
上下文处理器应该返回一个字典,字典中的key会被模板中当成变量来渲染
被这个装饰器修饰的钩子函数,必须要返回一个字典,即使为空也要返回。
  
@app.context_processor  
def my_context_processor():  
    return {'username':'laowang'}  
源代码

@setupmethod
  def context_processor(
      self, f: TemplateContextProcessorCallable
  ) -> TemplateContextProcessorCallable:
      """Registers a template context processor function."""
      self.template_context_processors[None].append(f)
      return f
释义:
装饰器把方法my_context_processor添加到self.template_context_processors = {None: [_default_template_ctx_processor]}

这些方法会在每次渲染模板(render_template)时执行,最终效果就是可以在模板中可以访问它所定义变量
如果局部变量应用方法只蓝图使用或全局使用
蓝图也有类似方法

bp.context_processor # 仅对当前蓝图的模板渲染生效
bp.app_context_processor # 对所有的模板生效,等效于@app.context_processor
@bp.app_context_processor  
def global_datas():  
    return dict()  
相关推荐
小嘉丶学长2 分钟前
Day06 · 数据类型与类型检测
开发语言·python·学习·1024程序员节
段一凡-华北理工大学14 分钟前
高炉能源系统智能化:热风炉、煤气与极致能效~系列文章02:走进热风炉:蓄热、换炉、送风的工艺机理
大数据·数据库·能源·高炉能源管控·热风炉·热风炉工作原理
紧跟先前的步伐21 分钟前
Go AI Agent 实战 18|Tool Calling 的基本原理与完整执行流程
前端·数据库·人工智能·ai·golang·1024程序员节
EnCi Zheng32 分钟前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
大数据·数据库·人工智能
计算机毕业编程指导师41 分钟前
基于深度学习的电子垃圾与混合材料图像分类系统实战:ResNet-50迁移学习+Django部署+三种识别入口完整方案
python·深度学习·毕业设计·resnet·课程设计·图像分类·电子垃圾
外收内放42 分钟前
FastAPI猜字谜实战(5):会话管理
开发语言·python·学习·fastapi
垆边人似月.1 小时前
选型与快速跑通(Tesseract / EasyOCR / PaddleOCR)
前端·python
泡海椒1 小时前
JQuick-SQL 逻辑数据仓库:以注册数据集构建轻量分析层
数据库·数据仓库·sql
Carl_奕然1 小时前
【智能体】Loop 的四种设计模式之:Verification Loop(2026 最新版)
人工智能·python·设计模式
茉莉玫瑰花茶1 小时前
线性代数 [ 矩阵乘法与线性变换复合的联系 ]
python·线性代数·math