英德网站建设,网站建设域名未拿到,游戏软件开发公司排名,pc网站转换手机网站代码由于flask版本升级问题#xff0c;flask-manager里面的Command命令高版本不支持#xff0c;低版本的兼容flask-sqlalchemy启动也会报错#xff0c;第三方插件有很多问题#xff0c;所以痛定思痛决定放弃使用这个#xff0c;使用flask自带语法自己写一个
类似于django继承…由于flask版本升级问题flask-manager里面的Command命令高版本不支持低版本的兼容flask-sqlalchemy启动也会报错第三方插件有很多问题所以痛定思痛决定放弃使用这个使用flask自带语法自己写一个
类似于django继承django.contrib.auth.User一样 request.user全局一样可以获取到用户信息
#钩子函数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否则为nonesetattr(g, user, user)#把user绑定到一个全局对象g上去全局变量g设置一个属性“user”值为userelse:#如果没有这个user也设置一下防报错setattr(g, user, None)app.context_processor#上下文处理器在每个页面都能显示当前用户
def my_context_processor():return {user: g.user}#返回的数据在所有的模板当中都可以使用
dectorators.py
from functools import wraps
from flask import g, redirect, url_fordef 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使用全局变量和上线文方式读读取用户信息 context_processor上下文处理器钩子函数
上下文处理器应该返回一个字典字典中的key会被模板中当成变量来渲染
被这个装饰器修饰的钩子函数必须要返回一个字典即使为空也要返回。app.context_processor
def my_context_processor(): return {username:laowang}
源代码setupmethoddef 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()