如何重命名;行政";Django中的静态文件?

如何重命名;行政";Django中的静态文件?,django,admin,Django,Admin,加载Django管理页面时,加载默认的Django管理css/js文件。例如,example.com/staticfiles/admin/css/base.css 我启用了默认的Amazon WAF(防火墙)规则,该规则阻止对URL中包含“admin”一词的页面的所有访问。到目前为止,这很好——因为大多数机器人喜欢寻找/admin域 但是,这最终会阻塞Django管理员。我可以使用url.py中的一行代码将Django管理员url重命名为/manager,但是我不知道如何更改管理员静态文件的文件

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

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

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

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

ADMIN\u FOLDER\u 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.url)]

正如您在
example.com/staticfiles/admin/css/base.css
中注意到的那样,url是基于文件夹结构的

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

#admin/base.html中的一行
这意味着您不能更改管理员静态文件的
example.com/staticfiles/
之后的路径

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

  • 将模板目录从
    venv/Lib/site packages/django/contrib/admin/
    复制到project base文件夹
  • 查找模板中出现的所有
    {%static”admin/
    ,并将
    {%static”admin/
    替换为
    {%static”manager/
    。需要注意不要更改模板文件中的任何其他内容
  • 更新
    TEMPLATES
    settings>
    'DIRS':[os.path.join(BASE\u DIR,'TEMPLATES')]



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

您解决了错误的问题。防火墙有标准规则来帮助您启动,但必须根据他们所保护的环境进行定制,而不是相反

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

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


“我刚买了一个防火墙。我可以使用什么应用程序框架来支持它,而无需更改框架?"

你为什么要阻止访问
/admin
?机器人程序仍然会在
/manager
找到你的管理面板,这不会使它更安全。你关于如何更改管理路径的问题已经回答了很多次。例如@robinsax
/manager
就是一个示例名称——我真正使用的新管理员名称是随机的字符串。我不关心他们找到它,我关心的是能够阻止1000次在Web服务器级别随机尝试查找我的管理门户。我的应用程序因机器人尝试
/phpMyAdmin
rapid fire而崩溃。@robinsax这是另一个问题——我谈论的是静态文件,答案不会改变。编辑了我的问题继续澄清。@SafwanSamsudeen我不认为这与能够回答这个问题有什么关系。我认为直接编辑Django包是不明智的。每当我更新Django时,我都必须再次这样做。重新编写URL似乎是可能的,尽管我不相信它会像以前的防火墙那样工作NGINX@bones225是的,你会做的如果您要自定义管理面板的外观,也会发生同样的事情。核心功能不会因为覆盖模板文件而改变。嗯-我不同意。AWS WAF有一些默认规则集,它们要么全有,要么全没有,我很难重新创建。我明白您的意思,但我认为这并不适用,我认为在许多更改集中是这样的如果答案像“是的,只需做
ADMIN\u FOLDER\u NAME='manager'
”这样简单,那么问题是否仍然是错误的这与简单性无关。如果您的客户要求/admin应该是一个有效的路由,那么它就是一个有效的路由。在/static下面的所有资产,包括admin资产,都不会对应用程序造成伤害,所以您应该能够豁免它。如果不可变WAF有规则不允许在POST有效负载中使用SQL关键字,但是您的站点这是一个关于SQL的博客,然后呢?如果应用程序是安全设计的,WAF应该只过滤对应用程序一开始无效的流量。
# a line from admin/base.html
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}">