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

sup*_*bro 3 database django storage text

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

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

谢谢!

Jam*_*urn 5

如果您希望能够搜索这些文件的内容,那么将它们存储在数据库中并不是一个糟糕的主意,但否则您可能应该将它们存储在文件系统中。

在任何一种情况下,您都需要创建一个模型来保存有关文件的信息:

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'))
Run Code Online (Sandbox Code Playgroud)

然后,您可以为特定用户提供文件列表视图,如下所示:

@login_required
def file_list(request):
    files = TextFile.objects.filter(request.user)
    return render(request, 'file_list.html', {'files': files})
Run Code Online (Sandbox Code Playgroud)

以及服务文件本身的视图:

@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())
Run Code Online (Sandbox Code Playgroud)