# -*- coding: utf-8 -*-
import shelve
from datetime import datetime
from flask import Flask, render_template, redirect, request, escape, Markup
app = Flask(__name__)
DATA_FILE = 'message'
def save_data(name, comment, create_at):
"""保存提交的数据"""
database = shelve.open(DATA_FILE)
if 'message_list' not in database:
message_list = []
else:
message_list = database['message_list']
message_list.insert(0, {
'name': name,
'comment': comment,
'create_at': create_at,
})
database['message_list'] = message_list
database.close()
def load_data():
"""返回已提交的数据"""
database = shelve.open(DATA_FILE)
message_list = database.get('message_list', [])
database.close()
return message_list
def post():
"""用于提交评论的URL"""
name = request.form.get('name')
comment = request.form.get('comment')
create_at = datetime.now()
save_data(name, comment, create_at)
return redirect('/')
@app.route('/')
def index():
message_list = load_data()
return render_template('index.html', message_list=message_list)
@app.template_filter('nl2br')
def nl2br_filter(s):
return escape(s).replace("\n", Markup('<br>'))
@app.template_filter('datetime_fmt')
def datetime_fmt_filter(dt):
return dt.strftime('%Y-%m-%d %H:%M:%S')
if __name__ == '__main__':
app.run('127.0.0.1', 8001, debug=True)
{% for message in message_list %}
<h3>{{ message.name }} 的消息 ({{ message.create_at | datetime_fmt }}):</h3>
<p>
{{ message.comment | nl2br }}<p>
</p>
{% endfor %}
Error message when running the program:
UnicodeDecodeError
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 16: ordinal not in range(128)
There is an error in the Chinese line, how to deal with it
The error should be reported by your
python
program. Try processing the Chinese encoding in your python, or try usingunicode
for everything. Please refer to the following: