我使用Bottle, a simple web server for python.
运行网站供个人使用我使用this API从雅虎财务中获取市场数据。
这是我的脚本的简化版本(我的第一个Python脚本,btw),其中的注释解释了它的工作原理。我希望这是可以理解的: 编辑:不知道我是否说清楚但是并非所有的代码都在这里,我花了很多钱,因为在这种情况下它是无关紧要的。
from bottle import route, run, template
from yahoo_finance import Share
#Using AAPL and FB as an example..
# Gets market data
AAPL = Share('AAPL')
FB = Share('FB')
# Does a whole bunch of things with the data that eventually makes readable portfolio percentages..
# This is SUPPOSED to be a function that refreshes the data so that when called in the template it has up to date data.
# Refresh market data..
def refreshAll():
AAPL.refresh()
FB.refresh()
#Basically this just has a bunch of lines that refreshes the data for every symbol
# Makes it accessible to my template..
# Variables changed to make it understandable..
my_dict = {'holdings': printTotalHoldings, 'day_change': PercentDayChange, 'total_change': PercentTotalChange, 'date': date}
# This is supposed to make the function accessible by the view. So when I call it, it refreshes the data. Doesn't seem to work though..
my_dict['refresh'] = refreshAll
# Makes the template routed to root directory.
@route('/')
def index():
# Template file index.tpl.. **my_dict makes my variables and functions work on the view.
return template('index', **my_dict)
# Starts the webserver on port 8080
if __name__ == '__main__':
port = int(os.environ.get('PORT', 8080))
run(host='0.0.0.0', port=port, debug=True)
这基本上就是我的index.py文件的样子。
这就是我在页面顶部的模板中所拥有的内容。我认为每次查看页面都会刷新数据,对吧?
% refresh() #Refreshes market data
然后用数据调用变量我只是把这样的东西放在HTML的位置:
<p class="day_change">Today's Change: <span id="price">{{get('day_change')}}</span></p>
除了数据永远不会改变之外,一切正常。为了实际刷新数据,我必须停止并在服务器上启动我的脚本。 这有意义吗?所以我的问题是,如何在不停止并每次重新启动脚本的情况下刷新数据?
谢谢!如果某些事情没有足够的意义,请告诉我。我有一点麻烦。
答案 0 :(得分:0)
在返回之前调用index()中的刷新代码。
答案 1 :(得分:0)
如果您未处于DEBUG模式,则Bottle is caching呈现模板。
一些事情:
Turn debug mode on,看看是否有帮助。运行服务器之前bottle.debug(True)
。 (编辑:我之前没有注意到你已经在使用调试模式了。无论如何都要把这个项目留在这里作为参考。)
请勿在模板中调用refresh()
(或任何其他状态更改或阻止功能)。这是个坏主意。正如两个建议的那样,您应该在调用模板之前从index
调用它。
@route('/')
def index():
refresh()
return template('index', **my_dict)
@route('/')
def index():
refresh()
# print the value of AAPL here, to confirm that it's updated
return template('index', **my_dict)