【问题标题】:How to rename "admin" static files in Django?如何在 Django 中重命名“admin”静态文件?
【发布时间】:2020-10-30 20:36:17
【问题描述】:

加载 Django 管理页面时,您会加载默认的 Django 管理 css / js 文件。例如,example.com/staticfiles/admin/css/base.css

我启用了默认的 Amazon WAF(防火墙)规则,该规则会阻止对 URL 中包含“admin”一词的页面的所有访问。到目前为止,这非常棒——因为大多数机器人都喜欢寻找/admin 域。

但是,这最终会阻止 Django 管理员。我可以使用urls.py 中的一行代码将Django 管理URL 重命名为/manager,但是我不知道如何更改管理静态文件的文件路径。由于所有静态文件都被阻止,我目前在我的管理员中获取原始的、未设置样式的 HTML。

理想情况下,我可以在settings.py 中写:

ADMIN_FOLDER_NAME = 'manager'

然后

example.com/staticfiles/admin/css/base.css 将被重写为 example.com/staticfiles/manager/css/base.css

我如何告诉 Django 在不同的文件夹中查找管理文件?

注意

我不是在问如何重命名访问管理页面的 url。我说的是管理静态文件。下面的代码确实改变了管理页面的 url,但没有改变静态文件的 url。

urlpatterns += [url(r'^newadminurl', admin.site.urls)]

【问题讨论】:

  • 为什么要阻止访问/admin?机器人仍会在 /manager 找到您的管理面板,但这并不会使其更加安全。
  • 您关于如何更改管理员路由的问题已经回答了很多次。例如stackoverflow.com/questions/968380/changing-admin-site-url
  • @robinsax /manager 是一个示例名称——我真正使用的新管理员名称是一个随机字符串。我并不关心他们是否找到它,就像我关心能够阻止 1000 次随机尝试在网络服务器级别找到我的管理门户一样。我的应用程序因尝试/phpMyAdmin 快速射击的机器人而崩溃。
  • @robinsax 那是不同的——我说的是答案不会改变的静态文件。编辑我的问题以澄清。
  • @SafwanSamsudeen 我看不出这与回答问题有什么关系。

标签: django admin


【解决方案1】:

您可能已经在example.com/staticfiles/admin/css/base.css 中注意到,该网址基于文件夹结构。

另外,应该注意的是,在 django 管理模板中,静态文件路径被称为查看名为 admin 的文件夹,如下所示:{% static "admin/css/base.css" %}(管理静态文件路径是硬编码的)。

# a line from admin/base.html
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}">

这意味着您不能更改 example.com/staticfiles/ 之后的管理静态文件的路径。

但是,可以通过复制模板目录来完成

  • 将模板目录从venv/Lib/site-packages/django/contrib/admin/ 复制到项目基础文件夹
  • 查找所有出现的{% static "admin/ 并将模板中的{% static "admin/ 替换为{% static "manager/。需要注意不要更改模板文件中的任何其他内容。
  • 更新TEMPLATES设置>'DIRS': [os.path.join(BASE_DIR, 'templates')]

Overriding Admin Templates


实现此目的的另一种可能方法是重写 URL 以从 URL 中删除或替换 admin。简单地重写 URL 将导致 404。此外,必须额外添加用于提供管理静态文件的服务器配置。

【讨论】:

  • 我认为直接编辑 Django 包并不明智。每当我更新 Django 时,我都必须再做一次。重写 URL 似乎是可能的,虽然我不相信它会像我的防火墙在 NGINX 之前那样工作
  • @bones225 是的。如果您要自定义管理面板的外观,您也会做同样的事情。仅覆盖模板文件不会更改核心功能。 Overriding Admin Site Templates Docs
【解决方案2】:

你解决了错误的问题。防火墙具有让您入门的标准规则,但必须进行自定义以匹配它们所保护的环境,而不是相反。

每次安装或升级时重命名文件和路由既费时又容易出错。对存在的路由进行例外处理 - 它们是有效的路由,因此请告知 WAF。

这样想吧:你永远不会发布这样的问题:

“我刚买了一个防火墙,我可以使用什么应用框架,可以放在它后面,而不需要改变框架?”

【讨论】:

  • 嗯 - 我不同意。 AWS WAF 有一些默认规则集,要么全部要么没有,我很难重新创建。我明白你的意思,但我认为这并不适用,我认为在许多更改中必须更改设置才能集成不同的产品。如果答案像“是的,就做ADMIN_FOLDER_NAME = 'manager'”这样简单,这仍然是个错误的问题
  • 它与简单无关。如果您的客户要求 /admin 应该是一个有效的路由,那么它就是一个有效的路由。 /static 下的所有资产,包括管理员资产,对应用程序没有损害,因此您应该可以免除它。如果不可变 WAF 的规则不允许在 POST 有效负载中使用 SQL 关键字,但您的站点是关于 SQL 的博客,那该怎么办?如果应用程序设计安全,WAF 应该只过滤对应用程序开始无效的流量。
猜你喜欢
  • 2013-01-15
  • 2016-06-18
  • 1970-01-01
  • 2012-12-23
  • 2021-06-19
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多