【问题标题】:Only allow django admin on site id 1仅允许站点 id 1 上的 django 管理员
【发布时间】:2018-03-16 20:54:24
【问题描述】:

我只想显示 id 为 1 的网站的管理员。 在其他视图中,我已在 dispatch 中定义了这一点,但我还没有找到为管理员执行此操作的方法。

我尝试创建一个custom admin class,但我也没有看到这样做的方法。

有没有办法为管理员定义dispatch,或限制管理员显示的站点?

我正在使用的调度:

def dispatch(self, *args, **kwargs):
    try:
        if get_current_site(self.request).pk != settings.MY_SITE_ID:
            response = render(self.request, 'my_app/404.html')
            response.status_code = 404
            return response
    except Site.DoesNotExist:
        response = render(self.request, 'my_app/404.html', {'site_doesnotexist': True})
        response.status_code = 404
        return response

    return super(MyView, self).dispatch(*args, **kwargs)

【问题讨论】:

    标签: django permissions django-admin django-sites


    【解决方案1】:

    您可以在启用管理员的站点的设置文件中指定不同的ROOT_URLCONF。这个ROOT_URLCONF 将包含管理员网址模式。

    MY_SITE_ID = 1
    ROOT_URLCONF = 'my_project.urls_with_admin'
    
    # my_project/my_project/urls_with_admin.py
    
    from django.conf.urls import url
    from django.contrib import admin
    
    from urls import urlpatterns
    
    urlpatterns.append(url(r'^admin/', admin.site.urls))
    

    其他站点使用的基本urls.py 文件将省略管理员模式,使管理员无法访问。

    【讨论】:

    • 我不确定我是否遵循,我所有的网站都使用相同的设置文件。所有站点也具有相同的视图和模型。我如何为一个站点创建一个单独的设置文件?
    • 对不起。我以为您使用的是Sites Framework,它是 Django 的可选部分,并且每个站点都有单独的设置文件。您也可以使用中间件为每个请求设置request.urlconf,但我不确定get_current_site 是否可以从中间件调用。
    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多