2009-06-14 85 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的主配置中放置重寫規則。