0
我正在用Django编写仪表板Web应用程序。这是一个物联网平台,用户可以从传感器查看时间序列数据。我正在研究一项功能,该功能将允许用户提取json
或csv
格式的行数据。Django自定义文件存储
我们拥有的是PSQL + InfluxDB时间序列。我们希望在UI中有一个页面,用户可以用行数据生成一个文件,然后可以下载它。用户也可以查看之前创建的文件(因此我们需要保留所有生成的文件并防止相同的文件被重新创建)。 我们计划使用python Celery任务创建文件,并在创建文件后将链接发送给用户。
我们正在努力的部分是找到一种方法来编写生成文件的模型。
我们有任务,其中:
- 提取行数据,并把它传递给2)
- 生成Python文件对象,并把它传递给3)
- 创建并保存在磁盘上的文件+创建保存模型对象
现在,我们有以下模型:
# models.py
from orgs.models import Organization
class Report(models.Model):
name = models.CharField(_('file name'), max_length=128,
unique=True)
file = models.FileField()
org = models.OneToOneField(
Organization,
on_delete=models.PROTECT,
related_name='org',
related_query_name='org',
blank=False,
null=True,
)
和任务任务3)
from reports.models import Report
from django.core.files import File
import hashlib
def sha1_name(org_name, uuid, start, end):
metadata = [org_name, uuid, start, end]
file_name = hashlib.sha1('_'.join(metadata)).hexdigest()
return file_name
def crete_and_save_report_object(org, #etc):
"""
Create report object
:param path_to_file: path to our file
:param org: object of model Organization from orgs.models
:return: report object
"""
with open(path_to_file) as file:
report = Report(name=sha1_name(#etc), file=File(file), org=org)
report.save()
return report
任何反馈将不胜感激。谢谢你的阅读。
感谢张贴。你可以在'views.py',第四行'img = qrcode.make(data)'中添加'qrcode'的定义' –
它是lib的内置方法,只需要返回一个文件对象作为你的CVS – Ykh