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)
相关文章:
Flask自定义装饰和g的使用
1. 在commons.py文件中新增一个装饰器类: 注:一定要加入wraps进行装饰否则,装饰器在给多个函数进行装饰时会报错 from functools import wraps from flask import session, current_app, g# 定义登陆装饰器,封装用户的登陆数据 def user_log…...
【汇编】汇编语言基础知识(学习笔记)
一、汇编语言概述 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件奈统的结构,才能有效的应用汇编语言对其编程。 二、汇编语言的产生 机器语言:机器语言是机器指令的集合 汇编语言的主体是汇编指令 汇编指令和机器指令的差别在…...
前端 | FormData 用法详解
前端 | FormData 用法详解 介绍 FormData 是 Ajax2.0 对象用以将数据编译成键值对,以便于 XMLHttpRequest 来发送数据。XMLHttpRequest Level 2 提供的一个接口对象,可以使用该对象来模拟和处理表单并方便的进行文件上传操作 如果表单属性设为 mu…...
linux常见命令-文件目录类
9.4 文件目录类 (1)pwd 指令:显示当前工作目录的绝对路径 (2)Is指令:查看当前目录的所有内容信息 基本语法: ls [选项,可选多个] [目录或是文件] 常用选项:-a:显示当前目录所有的文件和目录,包括隐藏的…...
2023 10月8日 至 10 月16日学习总结
1.做的题目 [RootersCTF2019]I_<3_Flask_双层小牛堡的博客-CSDN博客 [NCTF2019]SQLi regexp 盲注-CSDN博客 [网鼎杯 2018]Comment git泄露 / 恢复 二次注入 .DS_Store bash_history文件查看-CSDN博客 PHP LFI 利用临时文件Getshell_双层小牛堡的博客-CSDN博客 …...
【Java 进阶篇】深入了解 Bootstrap 表格和菜单
表格和菜单是网页设计中的重要组成部分,它们用于展示数据、导航和用户交互。Bootstrap 是一个强大的前端框架,提供了丰富的表格样式和菜单组件,使开发者能够轻松创建功能丰富的网页。在本文中,我们将深入探讨 Bootstrap 中表格和菜…...
java的for循环中遇到异常抛出后继续循环执行
java的for循环中遇到异常抛出后继续循环执行 Test public void loopTryCatchTest() throws Exception {Map<String, Object> a new HashMap();a.put("a", "1");a.put("b", null);a.put("c", "3");for (Map.Entry<…...
【Javascript】构造函数之new的作用
目录 new的作用 把对象返回了回来 无new 有new 把构造函数的this指向了要返回的对象 无new编辑 有new new的执行流程 new的作用 创建了新空对象将构造函数的作用域赋值给新对象(this指向新对象)执行构造函数代码 (为这个新对象添加属性)返回新对…...
粘包和半包问题及解决办法
粘包问题是指数据在传输时,在一条消息中读取到了另一条消息的部分数据,这种现象就叫做粘包。 半包问题是指数据在传输时,接收端只收到了部分数据,而非完整的数据,就叫做半包。 产生粘包和半包问题原因: …...
MySQL数据库查询实战操作
前置条件: 创建库:MySQL基本操作之创建数据库-CSDN博客 创建表:MySQL基本操作之创建数据表-CSDN博客 目录 常规查询常用函数union查询一、常规查询 1、查询所有姓名以 "张" 开头的学生: SELECT * FROM student WHERE name LIKE 张%; 这条语句使用 LIKE 运算…...
Elasticsearch 8.9 Master节点处理请求源码
大家看可以看ElasticSearch源码:Rest请求与Master节点处理流程(1) 这个图非常好,下午的讲解代码在各个类和方法之间流转,都体现这个图上 一、Master节点处理请求的逻辑1、节点(数据节点)要和主节点进行通讯࿰…...
Python---练习:while循环案例:猜数字
需求: 计算机从1 ~ 10之间随机生成一个数字,然后提示输入数字,如果我们输入的数字与随机数相等,则提示恭喜你,答对了。如果输入的数字比随机数大,则提示,猜大了。反之,则提示猜小了…...
CRM自动化意味着什么?企业如何从中受益?
客户关系管理(CRM)软件不再仅仅适用于大公司或销售周期长的行业,它越来越成为各种规模企业的重要工具。 在日常工作中,当你陷入流程的所有细节时,可能会产生不必要的工作。因此,如果你想要CRM提供的组织和…...
Python大数据之PySpark
PySpark入门 1、 Spark与PySpark 1、 Spark与PySpark...
网工记背命令(7)----静态路由(负载分担,主备备份)
1.静态路由负载分担 如图所示,属于不同网段的主机通过几台 Switch 相连,要求不配置动态路由协议,使不同网 段的任意两台主机之间能够互通,从拓扑图中可以看出,从 PCA 到 PCC 有两条路径可以过去,分别是 PC…...
error: unable to read askpass response from
报错信息 解决方法: 中文:文件-->设置-->版本控制-->Git-->勾选使用凭证帮助程序 英文:File -> Settings -> Version Control -> Git / Check "User credential Helper" 因为我的webstrom是中文版的&#…...
运行stable-diffusion-xl-refiner-1.0遇到version `GLIBCXX_3.4.29‘ not found的问题
一、问题背景 https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0 在运行示例程序时候遇到GLIBCXX_3.4.29‘ not found diffusers to > 0.18.0 import torch from diffusers import StableDiffusionXLImg2ImgPipeline from diffusers.utils import loa…...
Ubuntu - 安装 Elasticsearch(ES)
注意:以下步骤基于 Elasticsearch 7.x 版本。版本可能会随时间而变化,请查看 Elasticsearch 官方网站以获取最新的版本信息。 添加 Elasticsearch APT 仓库: 打开终端,并使用以下命令添加 Elasticsearch APT 仓库到系统…...
字节码进阶之java Instrumentation原理详解
文章目录 0. 前言1. 基础2. Java Instrumentation API使用示例 3. Java Agent4. 字节码操作库5. 实际应用6. 注意事项和最佳实践 0. 前言 Java Instrumentation是Java API的一部分,它允许开发人员在运行时修改类的字节码。使用此功能,可以实现许多高级操…...
Android 13.0 锁屏页面禁止下拉状态栏
1.概述 在13.0的系统产品定制化中,在默认的锁屏界面的时候原生系统是可以下拉状态栏的,但是定制的产品是需要禁用下拉状态栏的,所以需要在锁屏页面的时候禁用下拉状态栏,需要从两部分查看下拉状态栏流程然后禁用状态栏 接下来就来分析下看这个功能怎么实现 2.锁屏页面禁止…...
玄机靶场:供应链安全-供应链应急-Part2 通关笔记
供应链安全-供应链应急-Part2 通关笔记 题目背景 本题是供应链安全应急响应的第二部分,主要考察对Gitea代码仓库和Jenkins持续集成环境的综合分析能力。黑客通过某种手段获取了开发者的Gitea Token,进而对多个代码仓库进行了恶意篡改,并在J…...
深度解析:抖音批量下载器如何实现高效无水印视频采集
深度解析:抖音批量下载器如何实现高效无水印视频采集 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...
告别串口助手!手把手教你用Matlab直接读取STM32的浮点数据(附完整代码)
从STM32到Matlab的无缝数据流:高效浮点传输实战指南 每次调试嵌入式系统时,最让人头疼的莫过于数据导出和分析的繁琐流程。传统方式需要经过串口助手中转、手动保存文件、再导入Matlab的冗长步骤,不仅效率低下,还容易在多次转换中…...
从车窗升降到自动驾驶:聊聊LIN总线和CAN总线在实车里的那些事儿
从车窗升降到自动驾驶:LIN与CAN总线的汽车神经脉络解密 清晨七点十五分,当你坐进驾驶座按下车窗按钮时,可能不会想到这个简单的动作正触发着一场精密的电子交响乐。而在三公里外的高速公路上,前方车辆突然刹车时,你的爱…...
如何用VoiceFixer一键修复受损语音?AI音频修复完全指南
如何用VoiceFixer一键修复受损语音?AI音频修复完全指南 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer VoiceFixer是一款基于深度学习的通用语音修复工具,专为处理各类音频质量…...
**发散创新:基于Go语言的日志指标采集与可视化实战**在现代分布式系统中,**日志 + 指标*
发散创新:基于Go语言的日志指标采集与可视化实战 在现代分布式系统中,日志 指标已成为运维监控的核心支柱。如何高效地从服务中提取关键指标(如请求耗时、错误率、QPS),并将其结构化存储用于后续分析?本文…...
Spring Cloud Gateway 踩坑实录:升级到2020+版本后,lb://服务名路由503?一个依赖搞定
Spring Cloud Gateway 2020版本升级指南:解决lb://服务名路由503问题 最近在将Spring Cloud项目从Hoxton升级到2020.0.x及以上版本时,不少开发者遇到了一个奇怪的问题:原本运行良好的Gateway路由配置突然失效,特别是使用lb://服务…...
告别手动改图!用FME+Python搞定GIS数据五大拓扑错误(附完整模板)
从数据质检到智能修复:FME与Python联袂解决GIS拓扑难题 当一份布满尖锐角、自相交和缝隙的GIS数据摆在面前时,许多工程师的第一反应可能是头皮发麻。传统手动修复不仅耗时费力,还容易引入新的错误。本文将揭示如何通过FME Workbench与Python脚…...
TI C2000开发避坑指南:当SysConfig生成的board.c太大,导致CC8编译报错怎么办?
TI C2000开发实战:SysConfig生成代码过大导致CC8内存溢出的高效解决方案 第一次用TI的SysConfig工具配置完PWM和ADC外设,满心欢喜点击编译,结果跳出一行刺眼的错误:error #10099-D: program will not fit into available memory。…...
从Tomcat阻塞模型到虚拟线程非阻塞网关:某金融级API网关重构全过程,RT降低63%,资源成本节省71%
第一章:Java 25虚拟线程在高并发架构下的实践最佳实践Java 25正式将虚拟线程(Virtual Threads)从预览特性转为标准特性,标志着JVM在轻量级并发模型上的重大演进。相比传统平台线程,虚拟线程由JVM调度、用户态创建&…...
