我在.htacccess文件中阻止了某些查閱者,以避免將圖片提供給warez站點。這些圖像是直接提供的,所以Django不會觸及它們,我希望保持它的性能。編輯Django中的.htaccess管理員
但我希望能夠使用Django管理員將更多的阻止站點添加到.htaccess文件內的列表中,而無需使用FTP或SVN訪問站點。這可能嗎?怎麼樣?
我在.htacccess文件中阻止了某些查閱者,以避免將圖片提供給warez站點。這些圖像是直接提供的,所以Django不會觸及它們,我希望保持它的性能。編輯Django中的.htaccess管理員
但我希望能夠使用Django管理員將更多的阻止站點添加到.htaccess文件內的列表中,而無需使用FTP或SVN訪問站點。這可能嗎?怎麼樣?
您可以創建一個模型來定義.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)
我不知道我是否在這裏錯過了一些東西,但是不是這樣的嗎?
def add_to_htaccess(line):
htaccess = open("/path/to/.htaccess", "a")
htaccess.write(line+"\n")
htaccess.close()
你可能有一個相當困難的時間從管理應用程序這樣做,但你也許可以讓一個應用程序自己的代碼大約十幾行,加上模板幾個做到這一點。
編寫自定義應用程序,但重複使用管理模板:
{% 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> › {{page_title}}</div>{% endblock %}
{% block content %}
....Your code here....
{% endblock %}
它管理的URL前添加到您的網址以及所有意圖和目的是管理的一部分。如果您願意,您可以自定義管理模板以在對象工具或主菜單中包含指向它的鏈接。
你爲什麼要那樣做?爲什麼不寫一個普通的應用程序並向管理員註冊? – 2009-06-15 15:04:21
這隻會購買你創建/更新和刪除頁面。這是爲了當你需要的頁面看起來像他們是管理員的一部分,但是基於你自己的視圖功能。 – 2009-06-16 14:05:18
您可能會發現使用某些mod_rewrite voodoo更容易,並使用RewriteMap來保存要用重寫條件阻止的站點列表以檢查映射。這有一個好處,即地圖文件中唯一的東西就是網站列表,因此更新更容易。 Apache更新後,地圖文件也會自動重新加載。你可能需要在Apache的主配置中放置重寫規則。
那麼首先,在被封鎖的網站是不是在的.htaccess結束,所以我不能只是追加這一點。它必須被插入。其次,我正在考慮一個UI,可能或多或少由Django爲我自動創建,而不是文件寫入操作本身。 – 2009-06-14 01:01:24