我有一个使用Flask-Session的 Python3 Flask 应用程序(它添加了服务器端会话支持)并配置为使用该filesystem
类型。
这种类型底层使用 Werkzeug 类werkzeug.contrib.cache.FileSystemCache
(Werkzeug 缓存文档)。
如果打开,原始缓存文件如下所示:
J¬».].Äï;}î(å
_permanentîàå
respondentîåuuidîåUUIDîìî)Åî}î(åintîät˙ò∑flŒºçLÃ/∆6jhåis_safeîhåSafeUUIDîìîNÖîRîubåSECTIONS_VISITEDî]îåcurrent_sectionîKåSURVEY_CONTENTî}î(å0î}î(ås_idîås0îånameîåWelcomeîådescriptionîåîå questionsî]î}î(ås_idîhåq_idîhåq_constructîhåq_textîhå
q_descriptionîhåq_typeîhårequiredîhåoptions_rowîhåoptions_row_alpha_sortîhåreplace_rowîhåoptions_colîhåoptions_col_codesîhåoptions_col_alpha_sortîhåcond_continue_rules_rowîhåq_meta_notesîhuauå1î}î(hås1îhå Screeningîhå[This section determines if you fit into the target group.îh]î(}î(hh/håq1îh hh!å9Have you worked on a product in this field before?
可以在上面看到存储在会话中的项目: -current_section
应该是整数,例如0
-SECTIONS_VISITED
应该是整数数组,例如[0,1,2]
-SURVEY_CONTENT
格式应该是具有如下结构的对象
{
'item1': {
'label': string,
'questions': [{}]
},
'item2': {
'label': string,
'questions': [{}]
}
}
您可以在上面的摘录中看到,例如文本This section determines if you fit into the target group
是一个标签的值。后面的东西questions
是可以在每个questions
对象中找到的键,例如,q_text
以及它们的值,例如,Have you worked on a product in this field before?
是 的值q_text
。
我需要从存储的缓存文件中检索数据,这样我就可以在没有所有额外字符的情况下读取它们,例如å
.
我尝试像这样使用 Werkzeug,其中项目9c3c48a94198f61aa02a744b16666317
是我要读取的缓存文件的名称。但是,在缓存目录中找不到它。
from werkzeug.contrib.cache import FileSystemCache
cache_dir="flask_session"
mode=0600
threshold=20000
cache = FileSystemCache(cache_dir, threshold=threshold, mode=mode)
item = "9c3c48a94198f61aa02a744b16666317"
print(cache.has(item))
data = cache.get(item)
print(data)
有哪些方法可以读取缓存文件?
我在 Flask-Session 中打开了一个GitHub 问题,但多年来并没有真正得到积极维护。
对于上下文,我有一个实例,我的 Web 应用程序写入数据库暂时无法正常工作 - 但我需要的数据也保存在会话中。所以现在检索该数据的唯一方法是从这些文件中获取它。
编辑:
感谢蒂姆的回答,我使用以下方法解决了它:
import pickle
obj = []
with open(file_name,"rb") as fileOpener:
while True:
try:
obj.append(pickle.load(fileOpener))
except EOFError:
break
print(obj)
我需要加载文件中的所有腌制对象,因此我将 Tim 的解决方案与此处用于加载多个对象的解决方案相结合:https ://stackoverflow.com/a/49261333/11805662
没有这个,我只是看到了第一个腌制品。
另外,如果有人遇到同样的问题,我需要使用与我的 Flask 应用程序相同的 python 版本(相关帖子)。如果我没有,那么我会收到以下错误:
ValueError: unsupported pickle protocol: 4