具体来说,让我们谈谈我们想要用HTML显示的大型文本/日志文件。我见过各种方法,但出于可伸缩性的目的,
我想做的是获取一个包含空格分隔数据的日志文件,然后将其放入以HTML格式显示的表格中。
文本文件中的示例:
2016-05-10 21:13:56.030616 Button_Pressed
2016-05-10 21:14:44.534093 Door_Opened
2016-05-10 21:14:46.850801 Button_Pressed
2016-05-10 21:15:04.383880 Door_Closed
我想把每一行转换成标题为“日期,时间,事件”的表格。
简单的方法是使用某种列表,我们将每行读入列表,然后在返回时将列表传递给HTML。
Flask网络应用程序(app.py)中的Python代码摘录:
@app.route('/history')
def history():
with open('events.log') as event_log:
event_lines = event_log.readlines()
door_history = []
events = len(event_lines)
for x in range(events):
door_history.append(event_lines[x].split(" "))
return render_template('door-log.html', events=events, door_history=door_history)
示例HTML / Jinja代码摘录自Flask Web应用程序(door-log.html)
<table>
<tr>
<th>Date</th>
<th>Time</th>
<th>Event</th>
</tr>
{% for row in range(events) %}
<tr>
{% for column in range(3) %}
<td> {{ door_history[row][column] }} </td>
{% endfor %}
</tr>
{% endfor %}
</table>
然而,对于这种方法,这不是最好的内存使用吗?如果你有很多人访问同一页面,它会扩展吗?这是做这种事的正确方法吗?
答案 0 :(得分:0)
我不会说你的方式正是这样做的正确方法。然而,对于小型应用程序,它将比大多数其他解决方案更快地工作并且更快。
如果您的日志文件随着时间的推移而增长,您将不希望完整地显示它。相反,您可能希望仅实现显示最新的10个左右事件,提供包含更多事件(分页)的第二个页面。 在这种情况下,您可能仍然可以使用上述解决方案的改编版本。
但是,如果您有很多页面浏览量或想要拥有高级功能,例如:显示活动的最后一周,只显示开门事件或显示第一个日历周内发生的所有开门事件。然后,您希望通过将数据导入某种数据库来使数据更易于访问。
你可以使用SQLite作为数据库,但如果你真的有很多用户,像PostgreSQL这样的东西会是更好的选择。您不会在视图中导入数据,而是运行专用任务,以便再次更新数据库。在最简单的情况下,这可能是每分钟运行一次的cronjob。您也可以使用像celery这样的更高级的解决方案,在任何一种情况下,您最终可能会在数据库中产生稍微过时的数据,因此您的网站也不会有这种方法。
有关如何将数据库集成到应用程序中的信息,请参阅official flask documentation。 有关celery的更多信息(用于常规数据库更新),请查看flask documentation on the topic。如here所解释的那样,稍微更加苛刻的方式就是cron工作。
所有这一切:如果这只是一个简单的家庭项目而你没有学习经验,那么你现在的解决方案将100%足够。 如果您有兴趣学习更多或想要很多人使用