Как полностью отключить django.contrib.auth? - PullRequest
6 голосов
/ 01 апреля 2011

Поскольку я использую свою собственную систему аутентификации и авторизации (с моей собственной моделью User / Permission), я хотел бы полностью отключить это стандартное приложение из Django.

Я попытался удалитьсоответствующие строки из MIDDLEWARE_CLASSES и INSTALLED_APPS, но когда я использую команду syncdb, таблицы по умолчанию, поставляемые с системой аутентификации по умолчанию, все еще создаются.Есть ли способ предотвратить это?Моя основная проблема заключается в том, что стандартные таблицы переопределяют таблицы, которые я хочу использовать для моей собственной системы аутентификации.

INSTALLED_APPS = (
    'django.contrib.sessions',
    'form_utils',
    'org',
    'auth',
    'entities',
)

Я также пытался добавить приложения в пакет проекта, но это не дало никакого эффекта.1009 *

Может быть, есть другая настройка, которую я пропускаю?Другие возможные переменные, которые могут вызвать включение этих стандартных приложений, несмотря на мои усилия?

Я также не использую встроенную систему администратора, поэтому не думаю, что это может быть проблемой.

Дополнительная информация: Я недавно обновил Django 1.2 до 1.3.Может ли это быть причиной моей проблемы?

Редактировать: По-видимому, эта проблема вызвана изменением в Django 1.3.Соответствующий билет здесь: http://code.djangoproject.com/ticket/15735

Есть подсказки?

1 Ответ

6 голосов
/ 06 ноября 2011

Я полагаю, что модуль аутентификации загружается RequestContext.

По умолчанию параметр TEMPLATE_CONTEXT_PROCESSORS включает django.contrib.auth.context_processors.auth.

У меня не было проблемы создания django таблиц базы данных auth, но он вставлял объект AnonymousUser в мой контекст и мой сеанс под ключом 'user', хотя я удалил модули auth из моего INSTALLED_APPS и MIDDLEWARE_CLASSES настройки.

Я удалил этот элемент из TEMPLATE_CONTEXT_PROCESSORS, и все стало работать так, как я ожидал.

Обновление с 1.2 до 1.3 в вашем случае могло означать, что вы начали использовать универсальные представления на основе классов (что здорово), или, возможно, вы начали использовать RequestContext вместо обычных контекстных диктов. В любом случае, кажется, что когда аутентификация задана как контекстный процессор, django ведет себя так, как если бы аутентификация была в ваших установленных приложениях, независимо от того, действительно ли вы этого хотели или нет.

Надеюсь, это поможет.

...