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 ...utils.commons 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/109796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考-认证技术原理与应用

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 by 2023年10月 网络安全认证技术是指通过密码、数字证书、生物特征识别等手段&#xff0c;对使用网络的用…

【Mac】时间机器频繁提示磁盘没有正常推出

问题描述 有一次在进行时间机器备份的时候总是提示“磁盘没有正常推出”&#xff0c;并且好几次直接导致系统重启… 估计是 MacOS 系统 bug 解决 看了 Vex 一个帖子之后设置了一个硬盘是否休眠就好了&#xff0c;不要勾选让硬盘处于休眠就可以了&#xff0c;在电池选项界面中…

MySQL 8.0 OCP认证精讲视频、环境和题库之五 事务、缓存

redo log buffer&#xff1a; 缓存与事务有关的redo log ,用来对mysql进行crash恢复&#xff0c;不可禁用&#xff1b; 日志缓冲区是存储要写入磁盘上日志文件的数据的内存区域。日志缓冲区大小由innodb_Log_buffer_size变量定义。 默认大小为16MB。日志缓冲区的内容会定…

2023-10-17 mysql-从库从binlog回放事件-分析

摘要: 2023-10-17 mysql-从库从binlog回放事件-分析 上下文: 2023-10-17 mysql-配置主从-记录-CSDN博客 场景: 两个机器上分别装mysql一个mysql配置成master,另外一个配置成slave, 并建立主从关系配置binlog为row格式在master上insert一条数据在slave的handler接口ha_write…

微信小程序-4

一、使用scss编译wxss文件 1.vscode安装easysass扩展 vscode插件 - - - easysass - - - 安装 2.微信小程序 导入vscode扩展 开发者工具 - - - 视图 - - - 扩展 - - - 右侧三个点 - - - 导入已安装的vscode扩展 3.编辑 打开编辑器扩展目录&#xff0c;找到easysass文件夹&…

spring-statemachine 状态机自定义持久化入库

使用 spring-statemachine 状态机持久化时&#xff0c;可以通过内存、spring-statemachine-redis 或 spring-statemachine-data-jpa 现有方式持久化处理。 因项目审核操作记录频繁&#xff0c;数据量大&#xff0c;使用 内存 或 spring-statemachine-redis 模式不可取&#xf…

QTday02(常用类、UI界面下的开发、信号与槽)

今日任务 1. 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#x…

v-model表单数据双向绑定-表单提交示例

示例如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>v-model表单数据双向绑定<…

354 俄罗斯套娃信封问题(贪心+二分)

题目 链接 给你一个二维整数数组 envelopes &#xff0c;其中 envelopes[i] [wi, hi] &#xff0c;表示第 i 个信封的宽度和高度。 当另一个信封的宽度和高度都比这个信封大的时候&#xff0c;这个信封就可以放进另一个信封里&#xff0c;如同俄罗斯套娃一样。 请计算 最多…

【17.19消失的两个数字】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:vector<int> missingTwo(vector<int>& nums) {//找到a^bint temp0;for(auto num:nums){temp^num;}for(int i1;i<nums.size()2;i){temp^i;}//找…

Flink测试利器之DataGen初探 | 京东云技术团队

什么是 Flinksql Flink SQL 是基于 Apache Calcite 的 SQL 解析器和优化器构建的&#xff0c;支持ANSI SQL 标准&#xff0c;允许使用标准的 SQL 语句来处理流式和批处理数据。通过 Flink SQL&#xff0c;可以以声明式的方式描述数据处理逻辑&#xff0c;而无需编写显式的代码…

React 路由总结 react-router-dom6+react-router-dom5

开题 单页面应用和多页面应用 SPA&#xff1a;单页面应用程序&#xff0c;整个应用中只有一个页面(index.html) MPA&#xff1a;多页面应用程序&#xff0c;整个应用中有很多页面(*.html) react路由 现在的前端应用大多都是SPA单页面应用程序&#xff0c;也就是一个HTML页面的…

百度OCR识别图片文本字符串——物联网上位机软件

一、开发背景 根据项目需求&#xff0c;我们需要完成LED显示屏实时显示歌词的效果。最优的方法是调用歌曲播放器的API获取歌词&#xff0c;但是由于这个开发资格不是很好申请&#xff0c;因此我们采用其他方案&#xff0c;即通过OCR识别获取歌词&#xff0c;并投射到LED显示屏上…

二、电脑装机实践

计算机装机实践 一、零部件组装与启动二、操作系统安装与使用2.0 先导内容&#xff1a;BIOS引导模式、Boot Loader-引导加载程序、硬盘分区模式2.1 Win11安装2.2 Ubuntu22.042.2.0 Ubuntu简介2.2.1 Ubuntu22.04安装2.2.2 Ubuntu22.04使用2.2.2.1 新建文件模版2.2.2.2 给新安装应…

ExposureDiffusion: Learning to Expose for Low-light Image Enhancement论文阅读笔记

南洋理工大学、鹏城实验室、香港理工大学在ICCV2023发表的暗图增强论文。用diffusion模型来进行raw图像暗图增强&#xff0c;同时提出了一个自适应的残差层用来对具有不同信噪比的不同区域采取不同的去噪策略。 方法的框图如下所示&#xff1a; 一张raw图片可以由信号和噪声…

如何解决idea运行出现java: 程序包XX不存在

原因一&#xff1a;pom.xml没有将程序包XXX的<dependency>配置 直接将程序包的<dependency>配置写上即可 原因二&#xff1a;maven配置问题 打开idea的Settings, 进入Build Execution Deployment/Build Tools/Maven/Runner,将Delegate IDE勾上就可以了。(将idea…

Maven 基础教程系列

Maven是一个项目开发管理和理解工具。基于项目对象模型的概念&#xff1a;构建、依赖关系管理、文档创建、站点发布和分发发布都由pom.xml声明性文件控制。Maven可以通过插件进行扩展&#xff0c;以使用许多其他开发工具来报告或构建过程。 一、Maven 使用教程-CSDN博客 二、…

Eclipse Xtext 实现PLC ST 语言到C的转换

Eclipse Xtext 是开发领域专用语言&#xff08;DSL&#xff09;的工具。例如数据库的SQL 语言&#xff0c;PLC 的ST 语言都是一种领域专用语言。在开放自动化领域&#xff0c;提倡基于模型的设计方法。DSL 是描述模型的强有力工具。 在开发PLC 程序IDE时&#xff0c;开发ST编译…

网络安全内网渗透之信息收集--systeminfo查看电脑有无加域

systeminfo输出的内容很多&#xff0c;包括主机名、OS名称、OS版本、域信息、打的补丁程序等。 其中&#xff0c;查看电脑有无加域可以快速搜索&#xff1a; systeminfo|findstr "域:" 输出结果为WORKGROUP&#xff0c;可见该机器没有加域&#xff1a; systeminfo…

LeetCode【17】电话号码的字母组合

题目&#xff1a; 思路&#xff1a; 参考&#xff1a;https://blog.csdn.net/weixin_46429290/article/details/121888154 和上一个题《子集》的思路一样&#xff0c;先画出树结构&#xff0c;看树的深度&#xff08;遍历层级&#xff09;&#xff0c;树的宽度&#xff08;横向…