当前位置: 首页 > news >正文

flask---》登录认证装饰器/配置文件/路由系统

登录认证装饰器

# 0 装饰器的本质原理-# 类装饰器:1 装饰类的装饰器   2 类作为装饰器
# 1 装饰器使用位置,顺序
# 3 flask路由下加装饰器,一定要加endpoint-如果不指定endpoint,反向解析的名字都是函数名,不加装饰器没有问题,就是正常函数index,detail-如果加了装饰器---》index,detail都变成了inner---》反向解析的名字都是函数名inner,报错了-wrapper装饰器----》把它包的更像---》函数名变成了原来函数的函数名
def add(func):print(func)# 类装饰器:1 装饰类的装饰器   2 类作为装饰器# add 一定是个函数吗?
# 放个对象
class Person:def __call__(self, func):def inner(*args, **kwargs):res = func(*args, **kwargs)return resreturn innerp = Person()# @add  # test=add(test)--->test变成了None
@p  # test=p(test)  # p() 会触发__call__--->Person的 __call__(func)--->返回inner,以后test就是inner---》test(参数)--》执行的是inner
def test():print("test")print(test)def auth(func):def inner(*args, **kwargs):res = func(*args, **kwargs)  # 真正的执行视图函数,执行视图函数之,判断是否登录res.name='lqz'return resreturn inner@auth     # Foo=auth(Foo)
class Foo():passf=Foo()  # Foo()  调用 ---》inner()--->类实例化得到对象,返回,以后f就是Foo的对象,但是可以里面多了属性或方法
print(f)
print(f.name)### 有参装饰器--->额外为被装饰的函数传参数
@auth(10)     # Foo=auth(10)(Foo)
class Foo():pass

配置文件

 

PS: 由于Config对象本质上是字典,所以还可以使用app.config.update(...)
app.config['DEBUG'] = True#通过py文件配置
app.config.from_pyfile("python文件名称")
如:
settings.py
DEBUG = True
app.config.from_pyfile("settings.py")#通过环境变量配置
app.config.from_envvar("环境变量名称")
#app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
环境变量的值为python文件名称名称,内部调用from_pyfile方法# JSON文件名称,必须是json格式,因为内部会执行json.loads
app.config.from_json("json文件名称")# 字典格式
app.config.from_mapping({'DEBUG': True})# 对象
app.config.from_object("python类或类的路径")app.config.from_object('pro_flask.settings.TestingConfig')settings.pyclass Config(object):DEBUG = FalseTESTING = FalseDATABASE_URI = 'sqlite://:memory:'class ProductionConfig(Config):DATABASE_URI = 'mysql://user@localhost/foo'class DevelopmentConfig(Config):DEBUG = Trueclass TestingConfig(Config):TESTING = TruePS: 从sys.path中已经存在路径开始写PS: settings.py文件默认路径要放在程序root_path目录,如果instance_relative_config为True,则就是instance_path目录(Flask对象init方法的参数)

路由系统

#  1  flask路由系统是基于装饰器的:参数如下
# 2 转换器:
# 3 路由系统本质
# 4 endpoint 不传会怎么样,不传会以视图函数的名字作为值,但是如果加了装饰器,所有视图函数名字都是inner,就会出错,使用wrapper装饰器再装饰装饰器

 

from flask import Flaskapp = Flask(__name__)# 1  flask路由系统是基于装饰器的:参数如下
# rule:路径
# methods :请求方式,列表
# endpoint: 路径别名# 2 转换器:
'''  string  int  path
'default':          UnicodeConverter,
'string':           UnicodeConverter,
'any':              AnyConverter,
'path':             PathConverter,
'int':              IntegerConverter,
'float':            FloatConverter,
'uuid':             UUIDConverter,
'''## 3 路由系统本质-->读源码
'''
def decorator(f: T_route) -> T_route:endpoint = options.pop("endpoint", None) #从options弹出,如果没有,就是None ---》@app.route(传了就有,不传就是None)self.add_url_rule(rule, endpoint, f, **options)return f  # f 就是视图函数,没有对视图函数做事情,只是在执行视图函数之前,加了点操作核心:self.add_url_rule(rule, endpoint, f, **options)---》self就是app对象
app.add_url_rule('路由地址', '路由别名', 视图函数, **options)--->跟django很像add_url_rule的参数详解rule, URL规则,路径地址view_func, 视图函数名称defaults = None, 默认值, 当URL中无参数,函数需要参数时,使用defaults = {'k': 'v'}为函数提供参数endpoint = None, 名称,用于反向生成URL,即: url_for('名称')methods = None, 允许的请求方式,如:["GET", "POST"]#对URL最后的 / 符号是否严格要求strict_slashes = None#重定向到指定地址redirect_to = None, ''''''
4 endpoint 不传会怎么样,不传会以视图函数的名字作为值,但是如果加了装饰器,所有视图函数名字都是inner,就会出错,使用wrapper装饰器再装饰装饰器'''## 4# @app.route('/detail/<int:nid>',methods=['GET'],endpoint='detail')
# @app.route('/<path:aa>', methods=['GET'])
@app.route('/', methods=['GET'])  # index=app.route('/<aa>', methods=['GET'])(index)--->index=decorator(index)
def index(name):print(name)return 'hello world'def home():return 'home'# app.add_url_rule('/', 'index', index,defaults={'name':'lqz'})
# app.add_url_rule('/home', 'home', home,strict_slashes=True,redirect_to = '/')if __name__ == '__main__':app.run()

相关文章:

flask---》登录认证装饰器/配置文件/路由系统

登录认证装饰器 # 0 装饰器的本质原理-# 类装饰器&#xff1a;1 装饰类的装饰器 2 类作为装饰器 # 1 装饰器使用位置&#xff0c;顺序 # 3 flask路由下加装饰器&#xff0c;一定要加endpoint-如果不指定endpoint&#xff0c;反向解析的名字都是函数名&#xff0c;不加装饰器…...

Jvm实际运行情况-JVM(十七)

上篇文章说jmap和jstat的命令&#xff0c;如何查看youngGc和FullGc耗时和次数。 Jmap-JVM&#xff08;十六&#xff09; Jvm实际运行情况 背景&#xff1a; 机器配置&#xff1a;2核4G JVM内存大小&#xff1a;2G 系统运行天数&#xff1a;7天 期间发生FULL GC次数和耗时…...

【BASH】回顾与知识点梳理(二)

【BASH】回顾与知识点梳理 二 二. Shell 的变量功能2.1 什么是变量&#xff1f;2.2 变量的取用与设定: echo, 变量设定规则: set/unset2.3 环境变量的功能用 set 观察所有变量 (含环境变量与自定义变量)export&#xff1a; 自定义变量转成环境变量那如何将环境变量转成自定义变…...

【分布式训练】Accelerate 多卡训练,单卡评测,进程卡住的解决办法

最近想把之前的一个模型的改成多卡训练的。我并不懂DDP&#xff0c;DP。一开始打算使用Transformers的Trainer&#xff0c;但是配置的过程踩了很多坑也没有弄成功。【我是自己写的评测方法&#xff0c;但是我找不到能让触发Trainer去用我的方法评测的路劲】&#xff0c;后来偶然…...

时间复杂度为O(nlogn)的两种排序算法

1.归并排序 归并排序的核心思想&#xff1a;如果要排序一个数组&#xff0c;我们先把数组从中间分成前后两部分&#xff0c;然后对前后两部分分别排序&#xff0c;再将排好序的两部分合并在一起&#xff0c;这样整个数组就都有序了。 归并排序使用的就是分治思想。分治&#x…...

java调用onnx模型,支持yolov5和yolov7

不点star不给解答问题 可直接运行主文件&#xff1a;ObjectDetection_1_25200_n.java 或者 ObjectDetection_n_7.java 都可以直接运行两个可以运行的主文件是为了支持不用网络结构的模型&#xff0c;即使是onnx模型&#xff0c;输出的结果参数也不一样&#xff0c;支持以下两种…...

DP-GAN损失

在前面我们看了生成器和判别器的组成。 生成器损失公式&#xff1a; 首先将fake image 和真实的 image输入到判别器中&#xff1a; 接着看第一个损失&#xff1a;参数分别为fake image经过判别器的输出mask&#xff0c;和真实的label进行损失计算。对应于&#xff1a; 其中l…...

自监督去噪:Noise2Void原理和调用(Tensorflow)

文章原文: https://arxiv.org/abs/1811.10980 N2V源代码: https://github.com/juglab/n2v 参考博客&#xff1a; https://zhuanlan.zhihu.com/p/445840211https://zhuanlan.zhihu.com/p/133961768https://zhuanlan.zhihu.com/p/563746026 文章目录 1. 方法原理1.1 Noise2Noise回…...

Mac 安装配置adb命令环境(详细步骤)

一、注意&#xff1a;前提要安装java环境。 因为android sdk里边开发的一些包都是依赖java语言的&#xff0c;所以&#xff0c;首先要确保已经配置了java环境。 二、在Mac下配置android adb命令环境&#xff0c;配置方式如下&#xff1a; 1、下载并安装IDE &#xff08;andr…...

GDAL C++ API 学习之路 (2) GDALRasterBand篇 代码示例 翻译 自学

GDALRasterBand Class <gdal_priv.h> GDALRasterBand是GDAL中用于表示栅格数据集中一个波段的类。栅格数据集通常由多个波段组成&#xff0c;每个波段包含了特定的数据信息&#xff0c;例如高程、红、绿、蓝色等&#xff0c; 用于表示影像的不同特征。提供了许…...

springboot对静态资源的支持

1、spring boot默认静态路径支持 Spring Boot 默认将 / 所有访问映射到以下目录&#xff1a;** classpath:/static classpath:/public classpath:/resources classpath:/META-INF/resources也就是说什么也不用配置&#xff0c;通过浏览器可以直接访问这几个目录下的文件。 1…...

WPF实战学习笔记27-全局通知

新建消息事件 添加文件&#xff1a;Mytodo.Common.Events.MessageModel.cs using Prism.Events; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Diagnostics;namespace Mytod…...

openSUSE安装虚拟化 qemu kvm

1) 第一种&#xff1a;图形界面yast安装虚拟化 左下角开始菜单搜索yast 点一下就能安装&#xff0c;是不是很简单呢 2&#xff09;第二种&#xff1a; 命令行安装 网上关于openSUSE安装qemu kvm的教程比较少&#xff0c;可以搜索centos7 安装qemu kvm的教程&#xff0c;然后…...

基于linux下的高并发服务器开发(第四章)- 多进程实现并发服务器(回射服务器)

1. socket // 套接字通信分两部分&#xff1a; - 服务器端&#xff1a;被动接受连接&#xff0c;一般不会主动发起连接 - 客户端&#xff1a;主动向服务器发起连接 2.字节序转换函数 当格式化的数据在两台使用不同字节序的主机之间直接传递时&#xff0c;接收端必然错误…...

【程序分析】符号执行

符号执行入门 参考&#xff1a;https://zhuanlan.zhihu.com/p/26927127 给定一个结果&#xff0c;求解对应的程序输入。 经典符号执行与动态符号执行 参考&#xff1a;https://p1kk.github.io/2021/04/04/others/%E7%AC%A6%E5%8F%B7%E6%89%A7%E8%A1%8C&%E6%B1%A1%E7%82…...

实验笔记之——Windows下的Android环境开发搭建

好久一段时间没有进行Android开发了&#xff0c;最新在用的电脑也没有了Android studio了。为此&#xff0c;本博文记录一下最近重新搭建Android开发的过程。本博文仅为本人学习记录用&#xff08;**别看&#xff09; 之前博客也对配置Android做过记录 Android学习笔记之——A…...

#rust taur运行报错#

场景:在window11系统上运行 tauri桌面莹应用&#xff0c;提示错误。 Visual Studio 2022 生成工具 安装的sdk11 , rust运行模式是stable-x86_64-pc-window-gnu&#xff0c; 运行npm run tauir dev 一致失败&#xff0c;失败信息如下 原因&#xff1a;1&#xff1a;在window11系…...

学习购药系统源码:从前端到后端的技术探索

本文将带领读者探索购药系统源码&#xff0c;从前端到后端逐步深入&#xff0c;了解其核心功能和实现方式。我们将使用常见的Web技术&#xff0c;包括HTML、CSS、JavaScript、以及Python的Django框架&#xff0c;展示购药系统的技术奥秘。 前端技术探索 HTML结构搭建 购药系…...

第九次CCF计算机软件认证

第一题&#xff1a;中间数 在一个整数序列 a1,a2,…,an 中&#xff0c;如果存在某个数&#xff0c;大于它的整数数量等于小于它的整数数量&#xff0c;则称其为中间数。 在一个序列中&#xff0c;可能存在多个下标不相同的中间数&#xff0c;这些中间数的值是相同的。 给定一个…...

【计算机网络】传输层协议 -- TCP协议

文章目录 1. TCP协议的引入2. TCP协议的特点3. TCP协议格式3.1 序号与确认序号3.2 发送缓冲区与接收缓冲区3.3 窗口大小3.4 六个标志位 4. 确认应答机制5. 超时重传机制6. 连接管理机制6.1 三次握手6.2 四次挥手 7. 流量控制8. 滑动窗口9. 拥塞控制10. 延迟应答11. 捎带应答12.…...

别再折腾了!Ubuntu 24.04 下用 TeX Live + VSCode 写论文,这份配置清单直接抄

Ubuntu 24.04 TeX Live VSCode&#xff1a;学术写作终极配置指南 如果你正在为毕业论文的格式调整而抓狂&#xff0c;或是厌倦了在不同教程间来回切换却始终无法解决中文乱码问题&#xff0c;那么这份指南就是为你准备的。作为一名在Linux环境下完成过三篇学术论文的老手&am…...

Biome 代码检查:别再等 ESLint 慢吞吞了

Biome 代码检查&#xff1a;别再等 ESLint 慢吞吞了 毒舌时刻这代码写得跟网红滤镜似的——仅供参考。各位前端同行&#xff0c;咱们今天聊聊 Biome。别告诉我你还在用 ESLint Prettier&#xff0c;那感觉就像用老爷车跑高速——能跑&#xff0c;但慢得让人崩溃。 为什么你需要…...

别再只调包了!深入对比VGG16、ResNet等9大模型在农业病害识别上的实战表现(附数据集)

深度视觉模型在农业病害识别中的实战评测&#xff1a;从特征提取到部署优化的全流程解析 当一片叶子出现褐色斑点时&#xff0c;农民往往需要等待数天才能获得实验室检测结果——这种传统诊断方式的滞后性&#xff0c;每年造成全球约20-40%的农作物损失。计算机视觉技术的突破正…...

Allegro PCB Design GXL (legacy) - 动态网格铜的避让技巧

1. 动态网格铜的基础概念 在PCB设计中&#xff0c;铜皮处理是影响电路性能的关键环节。Allegro PCB Design GXL (legacy)作为业界常用的EDA工具&#xff0c;提供了静态铜和动态铜两种处理方式。静态网格铜就像一块固定形状的铁板&#xff0c;不会自动适应周围环境&#xff1b;而…...

高效智能抖音直播下载工具:一站式解决方案

高效智能抖音直播下载工具&#xff1a;一站式解决方案 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 你是否曾经为错过精彩的抖音直播而遗憾&#xff1f;是否想要保存喜欢的直播内容却苦于没有合适的工具&a…...

日程管理革命:OpenClaw解析Qwen3.5-9B生成的待办清单并同步日历

日程管理革命&#xff1a;OpenClaw解析Qwen3.5-9B生成的待办清单并同步日历 1. 为什么需要智能日程管理 每天早上打开电脑&#xff0c;我的第一件事就是对着记事本手忙脚乱地整理当天的待办事项。这种原始的工作方式持续了三年&#xff0c;直到我发现会议时间冲突、任务遗漏成…...

手把手玩转Workbench单向流固耦合——从离心泵到风电叶片的实战指南

Workbench单向流固耦合---自己录制 01-离心泵流固耦合分析&#xff08;3节&#xff09; 包括01-水泵网格划分、02-CFX中流场设置 03-WB中单向耦合设置、04-后处理等 02-叶片耦合应力分析&#xff08;3节&#xff09; 包括01-BladeGen轴流叶片设置技巧、 02-Turbogrid旋转机械网…...

Java面试题精讲:Qwen-Image-Edit-F2P集成开发常见问题

Java面试题精讲&#xff1a;Qwen-Image-Edit-F2P集成开发常见问题 1. 引言 最近在Java技术面试中&#xff0c;我发现很多候选人在AI模型集成方面存在不少困惑。特别是像Qwen-Image-Edit-F2P这样的人脸驱动图像生成模型&#xff0c;虽然功能强大&#xff0c;但在实际Java项目集…...

3步解决AEUX图层对齐问题的完整指南

3步解决AEUX图层对齐问题的完整指南 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX AEUX作为连接设计工具与After Effects的桥梁&#xff0c;是设计师实现高效工作流的关键。然而在实际…...

单机游戏多人化:Nucleus Co-Op的技术突破与实践指南

单机游戏多人化&#xff1a;Nucleus Co-Op的技术突破与实践指南 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾梦想在同一台电脑上与朋友…...