【发布时间】:2014-06-09 06:06:20
【问题描述】:
我有一个烧瓶应用程序,它使用从 static 文件夹中的 Pickle 文件中获取的数据填充 html 表。我有一个外部应用程序每分钟更新一次 Pickle 文件。
views.py 文件打开 Pickle 文件并加载数据,然后将其发送到 html 模板。
我让应用程序运行起来了,虽然无论我刷新多少次页面,数据都与我在终端中首次启动应用程序时的数据相同。
我通过uwsgi --socket 127.0.0.1:3031 --wsgi-file run_web.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191 在screen 实例中启动它。
我忘记做什么才能正确刷新数据?
我正在使用 uswgi 和 nginx 来托管 Flask 应用
views.py...
import all the things
with open('/home/metheuser/webapps/ers_portal/app/static/' + ec.dd_filename) as f:
data = pickle.load(f)
column_names = data.pop('__column_names__')
column_names.insert(2, 'Screen Viewer')
column_names.insert(3, 'Site Page')
sites = data.keys()
for sitename in data:
data[sitename].insert(2, ec.unit_roster[sitename]['ip_address'])
data[sitename].insert(3, 'doesn\'tgoanywhereyet...')
dbt = da.Database_Authenticator(admin=False)
#************************************************
lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login'
def authenticate(un, typed_pw, remember=False):
"""login with database"""
my_user = dbt.authenticate_user(un, typed_pw)
if my_user: # user is authenticated
return my_user
else:
return False
@lm.user_loader
def load_user(userid):
print 'user id:',userid
try:
return dbt.get_user_by_id(userid)
except AttributeError:
return None
@app.before_request
def before_request():
g.user = current_user
@app.route('/')
@app.route('/index')
def index():
return render_template("index.html",
title = 'Main',)
@app.route('/login', methods = ['GET', 'POST'])
def login():
if g.user is not None:
if g.user.is_authenticated():
return redirect(request.args.get('next') or 'index')
form = LoginForm()
if form.validate_on_submit():
authed_user = authenticate(form.username.data, form.typed_pw.data, form.remember_me.data)
if authed_user:
authed_user.authenticated = True
u = login_user(authed_user, form.remember_me.data)
return redirect(request.args.get('next') or 'index')
return render_template('login.html',
title = 'Sign In',
form = form)
@app.route('/logout')
def logout():
logout_user()
return redirect('index')
@app.route('/my_table')
@login_required
def my_table():
print 'trying to access data table...'
return render_template("my_table.html",
title = "Rundata Viewer",
sts = sites,
cn = column_names,
data = data) # dictionary of data
【问题讨论】:
-
我的猜测是您在服务器启动时而不是在每次请求期间加载
Pickle文件,但是如果没有看到您的views.py文件,很难确定。 -
@dirn: 抱歉,我猜视图文件很重要。包括在上面
-
见下面@Daniel 的回答。您在进程启动时加载文件,但您希望在每次请求时加载它。