Flask自定义装饰和g的使用
- Flask自定义装饰和g的使用 推荐度:
- 相关推荐
Flask自定义装饰和g的使用
1. 在commons.py文件中新增一个装饰器类: 注:一定要加入@wraps进行装饰否则,装饰器在给多个函数进行装饰时会报错
from functools import wraps
from flask import session, current_app, g# 定义登陆装饰器,封装用户的登陆数据
def user_login_data(view_func):@wraps(view_func)def wrapper(*args, **kwargs):# 1,从sess1on中取出用户的user1duser_id = session.get("user_id")# 2通过user1d取出用户对象user = Noneif user_id:try:from info.models import Useruser = User.query.get(user_id)except Exception as e:current_app.logger.error(e)# 3.将u5er数据封装到g对象g.user = userreturn view_func(*args, **kwargs)return wrapper
2.装饰器的使用
from flask import current_app, jsonify, render_template, abort, session, g
from . import news_blue
from info import models
from info.utils.response_code import RET
from ...utilsmons import user_login_data@news_blue.route('/<int:news_id>')
##########自定义装饰器#######################
@user_login_data
def news_detail(news_id):try:############################原本的这里的功能被装饰器取代了############## # 0,从session中获取到user_id,并根据user_id获取到用户信息# user_id = session.get('user_id')# user = models.User.query.get(user_id)# 1,根据新闻编号,查询新闻对象try:news = models.News.query.get(news_id)except Exception as e:current_app.logger.error(e)return jsonify(errno=RET.DBERR, errmsg="获取新闻失败")# 2. 如果新闻对象不存在直接抛出异常if not news:abort(404)# 获取前6条热点新闻click_news = models.News.query.order_by(models.News.clicks.desc()).limit(6)click_news_list = []for item in click_news:click_news_list.append(item.to_dict())# 2.携带数据,渲染页面data = {"news_info": news.to_dict(),#########这里的user直接从g中取出,如果使用装饰包裹时g中是没有user的#########"user_info": g.user.to_dict() if g.user else '',"news": click_news_list}except Exception as e:current_app.logger.error(e)return jsonify(errno=RET.UNKOWNERR, errmsg='未知错误!')return render_template("news/detail.html", data=data)
最新文章
- ie未响应怎么办 浏览器IE无响应解决办法
- 主板蜂鸣器怎么接
- nginx之使用与配置教程
- 突破职场竞争,引领未来发展:考取《研发效能(DevOps)工程师职业技术认证》
- tcpdump wireshark简单使用
- 『MySQL快速上手』
- 【科研新手指南3】chatgpt辅助论文优化表达
- 什么是稳定扩散中的采样步骤?
- 散货发澳大利亚专线性价比高吗?
- 卷积神经网络(1)
- 【GlobalMapper精品教程】064:点云提取(按范围裁剪)
- 1 Supervised Machine Learning Regression and Classification
- Python 如何实现访问者设计模式?什么是访问者(Visitor)模式?实际案例中有什么作用?
- 智慧化城市内涝的预警,万宾科技内涝积水监测仪
- Wpf 使用 Prism 实战开发Day05
- VuePress介绍及使用指南
- 机器视觉系统的组成