django - 使用数据模型存储 .html 报告
问题描述
我是 Django 新手,我正在寻找解决以下问题的最佳方法。
我有一个生成两个报告的应用程序。一个是 JSON blob,所以我将它存储在 psql 中,数据模型使用 JSONField。第二个报告是一个 .html 文件。
.html 文件每天将生成多次,因此首先想到的是将其存储在数据库中。我还需要能够提取报告,以便它可以在 UI 中显示给用户。
我使用以下方法创建了一个测试数据模型TextField
:
class TestResultsHTML(models.Model):
name = models.CharField(max_length=200)
report = models.TextField()
它使它进入 Db 没问题,但是当我尝试检索它时,我似乎无法获得实际报告:
In [3]: html_results = TestResultsHTML.objects.get(id=4)
In [4]: html_results.name
Out[4]: 'b0f5c336-867a-44a3-a5ef-6297bf6042cf'
In [5]: html_results.report
Out[5]: "<_io.TextIOWrapper name='report.html' mode='r' encoding='UTF-8'>"
我预计 .report 会返回文件的实际内容。文件本身是 1800+ 行。
这是一个好方法还是不是 TextField 的预期用途?
解决方案
TextField 不存储文件,Django 有一个 FileField (见这里)。这会将文件保存到某个位置/文件夹,并且保存在数据库中的对象基本上存储了该位置,您以后可以访问该位置。像这样的东西:
class TestResultsHTML(models.Model):
name = models.CharField(max_length=200)
file_loc = models.FileField(upload_to=upload_location)
然后在以后打开文件,如下所示:
with open(html_results.file_loc, 'w'):
推荐阅读
- laravel - 从 lumen api 中的 Guzzle 发布请求中获取 form_params 数据
- selenium - “您需要指定至少一个 testng.xml、一个类或一个方法”
- python - 当且仅当在另一个列表中找到该键的所有值时,将字典的键附加到列表中
- php - php脚本在Powerhell写入文件时尝试读取文件的问题
- regex - 用 sed 替换正则表达式的第 N 个匹配项
- javascript - 用 ~async~ 替换 `model.exports`
- google-analytics - 清除收集在 GA 数据中
- javascript - Laravel mix,如何为前端和管理部分设置不同的 css 和 js?
- spring - 如何生成 WADL?
- here-api - Here Rest API 上的凭据无效