上一节总结了一个基本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 search4letters app = 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可以查看到访问信息。