【问题标题】:Django Admin: not seeing any app (permission problem?)Django Admin:没有看到任何应用程序(权限问题?)
【发布时间】:2010-12-28 03:11:54
【问题描述】:

我有一个使用 Django 运行一些自定义应用程序的站点。我没有使用 Django ORM,只使用了视图和模板,但现在我需要存储一些信息,所以我在一个应用程序中创建了一些模型并启用了 Admin。

问题是当我登录 Admin 时,它只是说“您无权编辑任何内容”,甚至 Auth 应用程序都没有显示在页面中。我正在使用使用 syncdb 创建的同一用户作为超级用户。

在同一台服务器上,我有另一个站点正在使用管理员就好了。

在 Apache/2.2.10 mod_python/3.3.1 Python/2.5.2 中使用 Django 1.1.0,在 Gentoo Linux 2.6.23 中使用 psql (PostgreSQL) 8.1.11

有什么想法可以找到解决方案吗?

非常感谢。

更新:它在开发服务器上工作。我敢打赌这与某些文件系统权限有关,但我找不到它。

UPDATE2:虚拟主机配置文件:

<Location />
  SetHandler python-program
  PythonHandler django.core.handlers.modpython
  SetEnv DJANGO_SETTINGS_MODULE gpx.settings
  PythonDebug On
  PythonPath "['/var/django'] + sys.path"
</Location>

更新 3:更多信息

  • /var/django/gpx/init.py 存在且为空
  • 我从 /var/django/gpx 目录运行 python manage.py
  • 该站点是 GPX,其中一个应用程序是 contable 并且位于 /var/django/gpx/contable 中
  • 用户 apache 是 webdev 组,所有这些目录和文件都属于该组并具有 rw 权限

更新 4:确认 apache 和 runserver 的设置文件相同(重命名并且都坏了)

更新 5:/var/django/gpx/contable/init.py 存在

这是 urls.py 的相关部分:

urlpatterns = patterns('',
                       (r'^admin/', include(admin.site.urls)),
                      )
urlpatterns += patterns('gpx',
   (r'^$',                         'menues.views.index'),
   (r'^adm/$',                     'menues.views.admIndex'),

【问题讨论】:

  • 您是否尝试过使用 Django 内置服务器,即 python manage.py runserver 还是直接使用 Apache+mod_python

标签: python django permissions django-admin


【解决方案1】:

确保您已将应用程序添加到 settings.INSTALLED_APPS。

admin 应用索引页面的 django 模板内容如下:

{% if app_list %}
    {% for app in app_list %}
    ...
{% else %}
    <p>{% trans "You don't have permission to edit anything." %}</p>
{% endif %}

那一定是你的问题。


编辑:要么,要么您没有以您所说的用户身份登录。您能否查看数据库并确保相关用户的 auth_user.is_superuser 的值为 1?


编辑:如果您的用户 is_staff 和 is_superuser 在数据库中被标记为 1,并且您确定您以该用户身份登录;您是否可能只在生产中看到此内容(即在 apache 下),并且您用于生产的 settings.py 与开发中的不同?


编辑:所以你在开发和生产中有不同的行为。我可以想到两种情况:

a) 您有不同的 settings.py 用于生产。您可以编辑您的问题以显示您的 httpd.conf 的相关部分吗?它应该是这样的:

<Location "/mysite/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonOption django.root /mysite
    PythonDebug On
</Location>

另外,你的 PYTHONPATH 是什么?

SetEnv 行在说什么?它是否指向您正在开发的相同模块?您确定在您的 PYTHONPATH 中有 mysite.settings 作为您认为的文件吗?

b) 您在生产中遇到 PYTHONPATH 问题,并且无法找到应用程序。不过,这应该会产生更严重的错误...


问题:

  • /var/django/gpx 有一个 init.py 对吗?
  • /var/django/gpx/settings.py 是否与执行 manage.py runserver 时使用的文件相同?
  • /var/django/ 中您的应用程序的名称是什么?
  • 运行 Apache 的用户是否拥有所有这些目录的权限?

【讨论】:

  • 感谢您的回答。所有应用程序都在设置中,没有显示。我还检查了数据库,用户打开了 is_superuser。
  • 好的,celopes,你很接近了。当我运行开发服务器时,管理员会显示所有内容。我只是不明白。我在这个站点上进行了大量的编辑,如果 settings.py 文件不正确,我应该无法处理它。但是,当我从 Apache 看到它时它不起作用,但它似乎在开发服务器上起作用。
  • * /var/django/gpx/__init__.py 存在且为空 * 我从 /var/django/gpx 目录运行 python manage.py * 该站点是 GPX,其中一个应用程序是可控制的,并且位于 /var/django/gpx/contable * 用户 apache 是 webdev 组,所有这些目录和文件都属于该组并具有 rw 权限
  • /var/django/gpx/contable/ 有自己的 __init__.py 吗?如果您使用 manage.py startapp contable 创建它,它应该 - 但只是检查
  • 我已经完全没有想法了......你的 urls.py 没有显示 admin.autodiscover(),但你已经说过它在那里。我不知道还能想什么……如果有什么事我会编辑答案。
【解决方案2】:

尝试访问您的数据库并在表 auth_user 中确保字段 is_staff、is_active 和 is_superuser 为您的用户标记为 true (1)。

【讨论】:

    【解决方案3】:

    听起来您还没有向管理员注册任何应用程序(this overview 中的第 5 步)。

    尝试将admin.autodiscover() 行添加到您的主urls.py,确保首先添加from django.contrib import admin

    例如:

    # Other imports...
    from django.contrib import admin
    
    admin.autodiscover()
    
    urlpatterns = patterns('',
        ('^admin/', include(admin.site.urls)),
        # Other URL patterns...
    )
    

    您还可以通过admin.site.register(YourModel) 单独注册您的模型。

    【讨论】:

    • +1 - 如果未完成自动发现,app_list 将在 admin 中为 index.html 为空白,您将看到该消息。
    • 谢谢,没关系,我在 urls.py 中有这些行。
    • 非常感谢。你的回答没有涵盖我的问题,但你的代码帮助了我。(我删除了admin.autodiscover()
    【解决方案4】:

    在旧版 django 0.96 上安装 django 1.1 时,我们遇到了同样的问题

    重新安装后解决了

    【讨论】:

      【解决方案5】:

      希望这对某人有所帮助,但我们遇到了同样的问题,因为有人向 settings.py 添加了不同的身份验证后端并且没有保留默认的 ModelBackend。将设置更改为:

      AUTHENTICATION_BACKENDS = (
          'auth.authentication.EmailBackend',
          'django.contrib.auth.backends.ModelBackend',
      )
      

      为我们修好了。

      【讨论】:

      • 帮我解决了更换后端后的组权限问题。谢谢!
      • 这对我有用。谢谢你。我觉得很奇怪。从身份验证后端删除 ModelBackend 后权限不起作用,这对我来说是错误的。
      • 谢谢,我也偶然发现了这个问题。
      • 这对我来说是解决方案,自定义后端,然后决定使用一些管理站点进行用户管理。我一直在查看我的后端和管理代码,但没有找到任何理由说明我的用户一旦被授予管理站点的权限就无法看到任何选项。超级用户标志起作用了,但是我不得不将管理应用程序简化太多,以使其对用户有用。 -- 编辑 --- 也许,现在似乎没有超级用户身份的用户可以执行所有超级用户任务,而不管权限设置如何。
      • 太棒了!谢谢 =) 我需要我们的自定义身份验证后端和 django 后端才能工作,这似乎有点奇怪 =S
      猜你喜欢
      • 2021-02-01
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      • 2023-03-22
      • 2014-09-09
      相关资源
      最近更新 更多