我在.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