从Django admin中编辑.htaccess

时间:2009-06-14 00:09:49

标签: django

我阻止了.htacccess文件中的某些引用来避免将图像提供给warez网站。这些图像是直接提供的,因此Django不会触摸它们,因为性能,我希望保持这种状态。

但我希望能够使用Django管理员在.htaccess文件中的列表中添加更多被阻止的站点,而无需使用FTP或SVN访问该站点。这可能吗?怎么样?

5 个答案:

答案 0 :(得分:3)

您可以创建一个定义.htaccess的所有可配置部分的模型;然后,在每次保存时添加一个信号(django doc),以调用一个函数,该函数将根据数据库中定义的内容编写新的.htaccess。
像这样的东西(像往常一样,这是未经测试的代码!):

class HtAccessExclusion(models.Model):
    exclusion = models.CharField(max_length=300)

from django.db.models.signals import post_save

def export_on_htaccess(sender, **kwargs):
    # write "standard" part of htaccess
    # use the content of HtAccessExclusion table to write all specific exclusions
    ...

post_save.connect(export_on_htaccess, sender=HtAccessExclusion)

答案 1 :(得分:2)

您可能会发现使用某些mod_rewrite voodoo更容易,并使用RewriteMap来保存要阻止的网站列表,并使用重写条件来检查地图。这样做的好处是,映射文件中唯一的东西就是站点列表,因此更新它更容易。 Apache更新后,地图文件也将由Apache自动重新加载。您可能需要在主Apache配置中放置重写规则。

答案 2 :(得分:1)

我不知道我在这里是否遗漏了什么,但是不是这样吗?

def add_to_htaccess(line):
    htaccess = open("/path/to/.htaccess", "a")
    htaccess.write(line+"\n")
    htaccess.close()

答案 3 :(得分:0)

您可能很难从管理员应用程序执行此操作,但您可以自己创建一个应用程序,在大约十几行代码中执行此操作,再为模板添加一些代码。

答案 4 :(得分:-1)

编写自定义应用,但重复使用管理模板:

{% extends "admin/base_site.html" %}
{% load adminmedia %}

{% block coltype %}flex{% endblock %}
{% block bodyclass %}change-list{% endblock %}

{% block breadcrumbs %}<div class="breadcrumbs"><a href="/admin/">Home</a>&nbsp;&rsaquo;&nbsp;{{page_title}}</div>{% endblock %}
{% block content %}
....Your code here....
{% endblock %}

在管理网址之前将其添加到您的网址,并将其添加到管理员的所有意图和目的中。您可以自定义管理模板,以便在对象工具或主菜单中包含指向它的链接。