【问题标题】:Where to store files for admin to download in Django?在哪里存储文件供管理员在 Django 中下载?
【发布时间】:2021-10-12 05:13:04
【问题描述】:

我有一些示例文件,我想在下载链接中提供给所有管理员。它们不依赖于模型或用户(除了需要管理员)。它们是 txt 文件,所有管理员都必须可以使用相同的文件。我在文档中找不到任何关于此的内容,或者我不知道要查找什么。据我了解只有css、js和图片是静态文件,那么txt文件应该在/media/吗?

我可以将这些文件放在哪里,以便只有管理员才能下载它们?现在,我的自定义管理模板中有一个指向 /media/admin/examples/data_template.txt 的硬编码链接,但任何人都可以访问此链接。我在 settings.py 中有这些配置:

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

编辑:我也尝试将它放在管理静态目录中,因此我使用 {% load static %} 和 href="{% static 'admin/example_files/data_template.txt' %}" 将其加载到模板中 -但是注销后我仍然可以使用下载链接。很明显,我正在开发中。应该是这样的吗?

【问题讨论】:

    标签: django django-admin django-staticfiles


    【解决方案1】:

    所以静态文件是那些通常是你的代码的一部分,或者你的依赖代码的一部分的文件。它们可以是 javascript 和 CSS 文件、网页图片等。

    然而,媒体文件通常是在 Django 项目的生命周期内由用户上传或由您的应用程序生成的文件。它们通常不存储在源代码管理中(就像静态文件一样)。基本上,任何进入 FileField、ImageField 的东西都被归类为媒体存储。

    在您的情况下,您可以创建一个带有文件字段的模型,然后将所有文本文件添加到该模型中。这会将这些文件存储在媒体根目录中。然后您可以创建一个视图,在其中检查用户是否是管理员,如果是,则他们可以查看、下载这些文件。

    【讨论】:

    • 但是这些文件不是用户上传的。而且我确实希望它们存储在源代码管理中,因为它们是网站的一部分。据我了解,我可以通过将文件添加到 git、将它们放在媒体中并从管理员视图中引用它们来做到这一点。但是现在,如果我从管理员注销并复制粘贴 url,我仍然会得到该文件。那是因为我处于开发模式吗?
    • 你能分享一下代码吗?如果你想给文件某些权限,你可以添加 django mixin,比如 loginrequiredmixin 和 permissionrequiredmixin 来控制谁有访问权限。
    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 2021-04-23
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多