2014-08-28 140 views
0

使用(真棒)Python Flask framework,我正在建立一个网站,为此我有3个“常量”每天早上都会改变(所以我的常量不是很稳定,但我知道,但仍然)。我几乎每次调用Web服务器(包括页面和API请求)都需要这些常量,所以我希望这些常量的检索非常高效。如何有效定义日常常量?

我想最有效的方法来定义这些常量是每天早上在代码中手动设置它们。但由于我很懒,编程背后的想法是让事情自动化,我没有理由以不同的方式处理。这就是为什么我想到3种不同的方式;

  1. 储存在一个数据库中的常数(我用我的网站的Postgres)
  2. 商店的常量,我在加载一个小文件。
  3. 商店更速度常数优化的关键值商店,如Redis

但:

  1. 存放于我的Postgres数据库当然是容易的,但创建一个福我将单独记录3张单独记录,这些记录每天都会被覆盖,这看起来并不合乎逻辑。
  2. 为每个请求打开一个文件也需要时间,虽然基准测试显然会告诉答案。
  3. 设置一个完整的redis服务器(我从来没有做过,但看起来像一个很酷的挑战)也似乎有点矫枉过正,我想存储的简单的东西。

我有这样的想法,我忽略了一个非常简单的很酷的技巧,我无法想象。有谁能够启发我什么是最聪明的事情吗?欢迎所有提示和想法!

+0

难道这些常量是不可计算的,以免存储它们? 我的意思是你可以使用年/月/日的组合吗? – Simpom 2014-08-28 08:23:12

+0

你能给我们举个“常数”值的例子吗? – Dragu 2014-08-28 08:27:04

+0

@Simpom - 不幸的不是。我使用API​​调用从外部源获取它们。 – kramer65 2014-08-28 08:27:46

回答

2

也可以使用环境变量。

当您检索你的“常量”将其设置在环境:

import os 
os.environ['MY_DAILY_CONST_1'] = 'dailyconst1' 
os.environ['MY_DAILY_CONST_2'] = 'dailyconst2' 
... 

而当你要访问它:

import os 
myconst1 = os.environ['MY_DAILY_CONST_1'] 
... 
1

由于您使用的瓶,你还可以保存常量作为应用程序级别的全局变量。

from flask import Flask 
app = Flask('my_app') 

constant1, constant2, constant3 = retrieve_constants() 

app.jinja_env.globals['constant1'] = constant1 
app.jinja_env.globals['constant2'] = constant2 
app.jinja_env.globals['constant3'] = constant3