Django设计:存储和检索文本文件

时间:2014-07-09 13:57:14

标签: database django text storage

在我的应用程序中,我有一个脚本,绑定到一个按钮onclick事件,动态生成一个文本文件。这些文件不是太大(~3000行),但数据的涌入可能很慢(有时30分钟捕获所有流数据)。完成此过程后,我需要存储此文件,以便用户可以下载它。我还将从此点击事件的先前实例生成文本文件,并需要区分它们。

解决此问题的最佳方法是什么?我可以在数据库中存储此大小的文本文件,然后检索它吗?我应该只存储一个存在于其他地方的文本文件的路径,但在这种情况下,它将存储在哪里以及如何检索它? 如果存储在数据库中,主键是否足以提取我想要的文本文件?

谢谢!

1 个答案:

答案 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())