python - 在烧瓶应用程序中注入配置后如何使用装饰器?
问题描述
首先我的项目是这样的:
├───api
│ ├───config
│ │ └───config.json
│ ├───namespace
│ │ └───routes.py
│ └───auth.py (where the decorator is)
│ │
│ └───__init__.py (where the config is injected with flask injector)
├───core
└───example_service.py
我一直在尝试重构烧瓶应用程序上的一些现有代码,以避免在代码中硬写验证 url。这个想法是创建一个装饰器 @authorize 在应用程序的每个路由处理程序上使用,以检查请求标头 Authorization 是否已设置并正常工作。
现在装饰器看起来像这样:
def authorize(func):
def decorator(*args, **kwargs):
get_token_info()
return func(*args, **kwargs)
return decorator
验证函数如下所示:
def get_token_info():
session = requests.Session()
res = session.get('my_auth_url', headers={'Authorization' : request.headers['Authorization']}
if r.status_code != requests.codes.ok:
abort(401)
现在,我有一个应用程序的初始化文件,我在其中使用烧瓶注入器将应用程序的配置注入不同的服务类中。问题是,我还想注入 'my_auth_url' 而不是直接将其写入代码中。但似乎烧瓶注入器只能注入类。
我尝试使用烧瓶全局上下文使 url 在应用程序中的任何地方都可以访问,但我发现这不是它的目的,我真的不知道该怎么做。(实际上我是 python 新手)
非常感谢您的帮助,如果不清楚,对不起,项目很大,很难同时清晰简洁。
解决方案
您可以my_auth_url
从环境变量中获取值。
def get_token_info():
my_auth_url = os.getenv('AUTHORIZATION_SERVICE_ENDPOINT')
session = requests.Session()
res = session.get(my_auth_url, headers={'Authorization' : request.headers['Authorization']}
if r.status_code != requests.codes.ok:
abort(401)
推荐阅读
- r - R:在 linux 上安装 Rcplex
- jvm - 大型 Ec2 实例上 Atlassian 应用程序的 JVM 调优
- r - 创建包含多列内容的向量或列表
- javascript - 如何在 Haxe 中引用 JavaScript 库
- c# - PipeSecurity 与命名管道一起使用
- ios - Xcode I Tableview viewItemWithTag 无法从 UITableViewCell 转换为 UIImageView
- javascript - Google Sheet Script Editor - 报告格式的多个 Sumif
- java - 在 PostgreSQL 中存储未使用的数据块的最有效方法
- angular - Angular 5 - 将数据从 URL 加载到提供程序中,以便在应用程序中随处可用
- python - 给定时间后 Flask 客户端-服务器连接超时