我正在制作一个小瓶子应用程序,我有这样的东西:
@app.route('/bye')
def logout():
session.pop('logged_in', None)
flash('Adiós')
return redirect('/index')
毋庸置疑,当我运行应用程序并导航到'/ bye'时,它给了我一个UnicodeDecodeError。好吧,现在它在每个扩展基本模板(呈现消息)的页面上都给了我相同的unicodedecodeerror,即使在重新启动应用程序之后也是如此。尽管在源代码中删除了闪存,但始终使用相同的dump()。我能想到的只是废话?请帮助。
我必须重新启动计算机以清除愚蠢的会话缓存或其他内容。
答案 0 :(得分:14)
我认为flash()实际上会创建一个名为session ['_ flashes']的会话。请参阅此代码here。所以你可能要么:
clear/delete the cookie
OR
session.pop('_flashes', None)
答案 1 :(得分:0)
Flask闪存将消息存储在会话cookie中,直到它们被成功“消耗”。 如果在这种情况下获得UnicodeDecodeError(https://wiki.python.org/moin/UnicodeDecodeError),则不会消耗消息,因此您会一次又一次地收到错误消息。
我的解决方案是从浏览器中删除cookie
由于我在使用本地化时遇到了问题,我现在通过安装我的翻译对象解决了原因:
trans = gettext.GNUTranslations(...)
trans.install(unicode=True)
在我的python源文件中使用UTF-8编码,在翻译文件中使用"Content-Type: text/plain; charset=UTF-8\n"
(.pot)
答案 2 :(得分:0)
您正在使用非ascii字符串“adiós”,因此您需要确保python将字符串处理为unicode,而不是ascii。
将其添加到python文件的标头中。这将告诉编译器您的文件包含utf8字符串
#!/usr/bin/env python
# -*- coding: utf-8 -*-
因此您的代码将是这样的:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask
app = Flask()
@app.route('/bye')
def logout():
session.pop('logged_in', None)
flash('Adiós')
return redirect('/index')