【问题标题】:Overriding admin views - Django覆盖管理视图 - Django
【发布时间】:2012-03-02 20:42:05
【问题描述】:

我正在使用 Django 1.3python 2.7 。我正在使用 Django 管理应用程序。我想要的是当 superuser 登录时,它应该显示 admin/index.html 和所有模型,这是默认行为但是如果任何其他用户登录不是超级用户,那么它应该显示一个与我的数据完全不同的模板(如'abc.html')。我应该怎么做才能做到这一点?我想我需要覆盖一些管理视图来这样做但不知道?

请帮忙。如果您想了解更多信息,请发表评论:)

【问题讨论】:

    标签: python django django-admin django-views


    【解决方案1】:

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

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

    【讨论】:

    • @anks 这个例子只是我的想法,没有经过任何测试。
    【解决方案2】:

    您使用附加权限规则创建修改后的 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 对象,一个用于普通用户,一个用于超级用户。

    您可以在两个管理站点的 URL 中包含两个路径。

    超级用户可以同时使用这两种路径。

    普通用户只能使用 URL 中的普通用户路径。

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

    【讨论】:

      【解决方案3】:

      您必须更改管理站点的视图。 Django 文档详细提及。请检查https://docs.djangoproject.com/en/1.3/ref/contrib/admin/,如果您有任何错误,请写回一些代码详细信息。

      【讨论】:

      • 我知道但是哪个视图登录视图?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2011-10-30
      • 1970-01-01
      • 2013-01-23
      • 2016-09-04
      • 1970-01-01
      • 2019-07-09
      相关资源
      最近更新 更多