Python 7 -- 文件存储数据

    上一节总结了一个基本web应用的代码,这一节主要讲用户访问的数据记录在log文件中,并显示在页面上。

这节步骤:

  1. 按以下目录建好相应的文件夹及内容

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可以查看到访问信息。

原文地址:https://www.cnblogs.com/keepSmile/p/9353719.html