重写admin视图 - Django

1 投票
3 回答
1194 浏览
提问于 2025-04-17 12:45

我正在使用 Django 1.3python 2.7,并且在使用 Django 的管理应用。我的需求是,当一个 超级用户 登录时,应该显示默认的 admin/index.html 页面,上面有所有模型的信息。但是,如果其他用户(不是超级用户)登录时,就应该显示一个完全不同的模板,比如 'abc.html'。我该怎么做才能实现这个功能呢?我想我需要重写一些管理视图,但我不知道该怎么做。

请帮帮我。如果你需要更多信息,请留言 :)

3 个回答

0

你需要修改一下管理员网站的界面。Django的文档里有详细的说明。如果你遇到任何错误,可以查看这个链接:https://docs.djangoproject.com/en/1.3/ref/contrib/admin/,如果还有问题,请把你的代码细节发回来。

3

我会创建一个中间件,用来检查用户是不是超级用户。如果用户不是超级用户,就把他/她重定向到一个自定义的管理页面,而不是默认的那个页面。

class SuperUserMiddleware(object):
    def process_request(self, request):
        user = request.session.user
        if not user.is_superuser:
            return HttpResponseRedirect(NON_SUPERUSER_URL)
        ...
0

你可以创建一个修改过的 AdminSite 类,这个类里有额外的权限规则。

class SuperUserAdminSite( AdminSite ):
    def has_permission(self, request):
        return request.user.is_active and request.user.is_staff and request.user. is_superuser

现在你可以创建两个 AdminSite 对象,一个给普通用户用,一个给超级用户用。

你可以在网址中为这两个管理网站设置两个不同的路径。

超级用户可以使用这两个路径。

而普通用户只能使用普通用户的那个路径。

https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#adminsite-objects

撰写回答