上一节总结了一个基本web应用的代码,这一节主要讲用户访问的数据记录在log文件中,并显示在页面上。
这节步骤:
- 按以下目录建好相应的文件夹及内容
webapp
|—-vsearch4web.py
|—-vsearch.log #自动创建的log文件,用于记录浏览器访问信息。
|—-static
| |—-hf.css
|—-templates
| |—-base.html #基模板
| |—-entry.html
| |—-result.html
| |—-Viewlog.html #查看日志文件
相比上一节,需要修改vsearch4web.py来将日志写入log文件,并新增Viewlog.html 来友好的显示结果。
修改后的vsearch4web.py
from flask import Flask, render_template, request, escape
from vsearch import search4lettersapp = Flask(__name__)# 写日志文件,同一个请求的不同信息以'|'分隔。
def log_request(req: 'flask_request', res: str) ->None:
with open('vsearch.log', 'a') as log:
print(req.form, req.remote_addr, req.user_agent, res, file=log, sep='|')@app.route('/search4', methods=['GET', 'POST'])
def do_search() -> 'html':
phrase = request.form['phrase']
letters = request.form['letters']
title = 'Here are your results:'
results = str(search4letters(phrase, letters))
log_request(request, results)
return render_template('result.html', the_title=title, the_phrase=phrase, the_letters=letters, the_results=results)@app.route('/')
@app.route('/entry')
def entry_page() -> 'html':
return render_template('entry.html', the_title='Welcome to this Web!')@app.route('/viewlog')
def view_the_log() -> str:
contents = []
#读取日志文件,并读取为嵌套列表,便于以表格样式显示结果。
with open('vsearch.log') as log:
for line in log:
contents.append([])
for item in line.split('|'):
contents[-1].append(escape(item))
titles = ('Form data', 'Remote_addr', 'User_agent', 'Results')
return render_template('Viewlog.html',
the_title='View Log',
the_row_titles=titles,
the_data=contents,)if __name__ == '__main__':
app.run(debug=True)
新增的Viewlog.html
{% extends 'base.html' %}{% block body %}<h2>{{the_title}}</h2><table>
<tr>
{% for row_title in the_row_titles %}
<th>{{row_title}}</th>
{% endfor %}
</tr>
{% for log_row in the_data %}
<tr>
{% for item in log_row %}
<td>{{item}}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% endblock %}
2. 启动服务器,并访问页面http://127.0.0.1:5000/,输入要查询的英文句子后,点击do it.随后访问http://127.0.0.1:5000/ viewlog.html可以查看到访问信息。