2009-06-14 90 views
1

我在.htacccess文件中阻止了某些查阅者,以避免将图片提供给warez站点。这些图像是直接提供的,所以Django不会触及它们,我希望保持它的性能。编辑Django中的.htaccess管理员

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

回答

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

我不知道我是否在这里错过了一些东西,但是不是这样的吗?

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

那么首先,在被封锁的网站是不是在的.htaccess结束,所以我不能只是追加这一点。它必须被插入。其次,我正在考虑一个UI,可能或多或少由Django为我自动创建,而不是文件写入操作本身。 – 2009-06-14 01:01:24

0

你可能有一个相当困难的时间从管理应用程序这样做,但你也许可以让一个应用程序自己的代码大约十几行,加上模板几个做到这一点。

-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 %} 

它管理的URL前添加到您的网址以及所有意图和目的是管理的一部分。如果您愿意,您可以自定义管理模板以在对象工具或主菜单中包含指向它的链接。

+1

你为什么要那样做?为什么不写一个普通的应用程序并向管理员注册? – 2009-06-15 15:04:21

+0

这只会购买你创建/更新和删除页面。这是为了当你需要的页面看起来像他们是管理员的一部分,但是基于你自己的视图功能。 – 2009-06-16 14:05:18

2

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