在我的应用程序中,我有一个脚本,绑定到一个按钮onclick事件,动态生成一个文本文件。这些文件不是太大(~3000行),但数据的涌入可能很慢(有时30分钟捕获所有流数据)。完成此过程后,我需要存储此文件,以便用户可以下载它。我还将从此点击事件的先前实例生成文本文件,并需要区分它们。
解决此问题的最佳方法是什么?我可以在数据库中存储此大小的文本文件,然后检索它吗?我应该只存储一个存在于其他地方的文本文件的路径,但在这种情况下,它将存储在哪里以及如何检索它? 如果存储在数据库中,主键是否足以提取我想要的文本文件?
谢谢!
答案 0 :(得分:3)
如果您希望能够搜索这些文件的内容,那么将它们存储在数据库中并不是一个糟糕的主意,但是否则您应该将它们存储在文件系统中。
在任何一种情况下,您都希望创建一个模型来保存有关文件的信息:
class TextFile(models.Model):
user = models.ForeignKey(User, related_name='text_files')
# if storing in database
content = models.TextField()
# if storing in filesystem
content = models.FileField(storage=FileSystemStorage(location='/path/to/files'))
然后,您可以为特定用户提供文件列表视图,如下所示:
@login_required
def file_list(request):
files = TextFile.objects.filter(request.user)
return render(request, 'file_list.html', {'files': files})
提供文件的视图:
@login_required
def servr_file(request, file_id):
file = get_object_or_404(TextFile, user=request.user, pk=file_id)
# if storing in database
return HttpResponse(file.content)
# if storing in filesystem
return HttpResponse(file.content.read())