Python Django管理中的Django应用程序切换器
我有一个Django项目,其中有3个应用程序。附件1、附件2、附件3 我想创建一个界面,允许管理员激活任何应用程序 管理员可以从管理员界面更改当前活动的应用程序。 主意 创建一个包含3个选项的模型作为应用程序 允许管理员从应用程序中进行选择。 这是我的想法;但是,还有哪些事情会相应地发生变化呢 选项 支票在哪里更有意义?URL.py或已安装的应用程序? 如何有效地检查和管理当前激活的应用程序 有人能给我建议一些方法吗Python Django管理中的Django应用程序切换器,python,django,Python,Django,我有一个Django项目,其中有3个应用程序。附件1、附件2、附件3 我想创建一个界面,允许管理员激活任何应用程序 管理员可以从管理员界面更改当前活动的应用程序。 主意 创建一个包含3个选项的模型作为应用程序 允许管理员从应用程序中进行选择。 这是我的想法;但是,还有哪些事情会相应地发生变化呢 选项 支票在哪里更有意义?URL.py或已安装的应用程序? 如何有效地检查和管理当前激活的应用程序 有人能给我建议一些方法吗 谢谢 您不能仅从已安装的应用程序中删除该应用程序,因为您的项目url.py引用
谢谢 您不能仅从已安装的应用程序中删除该应用程序,因为您的项目url.py引用了该应用程序的URL。因此,您必须以某种方式在url级别处理任务 我认为最简单的解决方案是创建一个中间件,它将捕获禁用应用程序的URL并引发404错误: models.py 管理员 设置.py app/middleware.py 现在,管理员可以将任何url添加到阻止的url列表中,但不要尝试将/admin/添加到此列表中:-
当然,这只是概念证明,您的逻辑可能会有所不同。如果管理员添加不属于特定应用程序的每个新url,那将是非常忙碌的。我希望,如果我更改模型中的值,请选择一个应用程序,然后保存;我的服务器重新启动。为什么?服务器何时重启;它将从模型中加载新值,并在settings.py中进行设置。
class BlockedUrl(models.Model):
url_to_block = models.CharField(max_length=100,
help_text='For exaple: /polls/')
def __unicode__(self):
return self.url_to_block
class BlockedUrlAdmin(admin.ModelAdmin):
pass
admin.site.register(BlockedUrl, BlockedUrlAdmin)
MIDDLEWARE_CLASSES = (
...
'app.middleware.BlockedUrlsMiddeware',
)
from django.http import Http404
from app.models import BlockedUrl
class BlockedUrlsMiddeware(object):
def process_request(self, request):
for url in BlockedUrl.objects.values_list('url_to_block', flat=True):
if request.path.startswith(url):
raise Http404