Django Mongodb Engine: аутентификация, сеансы и модель пользователя - PullRequest
4 голосов
/ 07 ноября 2011

Я новичок в Django, и Mongodb кажется действительно крутым, и у меня есть несколько вопросов!Я использую Django nonrel с Django Mongodb Engine.Надеюсь, я не сделаю слишком много ошибок:)

1) Хорошо ли работает система аутентификации пользователей Django и система сеансов Django?Потому что на allbuttonspressed.com я вижу, что есть проблема с аутентификацией и интерфейсом администратора, а часть с сторонним написанным бэкэндом аутентификации заставляет меня думать, что система аутентификации django не работает с mongodb:

Вы можете редактировать пользователей только через интерфейс администратора, если вы добавите djangotoolbox в INSTALLED_APPS.В противном случае вы получите исключение о неподдерживаемом запросе, который требует JOIN.

Флориан Хан также написал аутентификационный бэкэнд, который обеспечивает поддержку разрешений для нереляционных бэкэндов.Вам следует использовать этот бэкэнд, если вы хотите использовать систему разрешений Django.

2) Если система аутентификации работает нормально, как я могу добавить поля в модель пользователя?В документации по Django я видел, что для достижения этой цели необходимо определить модель с OnetoOnefield для пользовательской модели («user = models.OneToOneField (User)») и определить другие поля, которые мы хотим в этой модели.Я понимаю, что это должно быть правильно с базами данных SQL.Но с таким NoSQL, как mongodb, который мне просто кажется неправильным, если я не ошибаюсь, он создает новую коллекцию и вставляет в каждый документ поле пользователя, используемое для связи документа с документом в коллекции User (в точности как внешний ключ).,Это совсем не похоже на NoSQL (ну, это просто мое чувство, но, поскольку я только начинающий, я могу ошибаться, не стесняйтесь меня поправлять).Есть ли рекомендуемый способ добавить поля непосредственно в пользовательскую модель?

3) Когда модель используется в Django, она помещает все поля в документ, даже если они пусты, верно?Разве это не пустая трата времени, чтобы записать множество имен полей в документах, если они пусты?

4) Этот вопрос больше касается самого Mongodb, чем движка, но я все равно задам его вам,может иметь ответ: Сколько дополнительного места требуется для индексации поля в коллекции?

Не думал, что я написал бы так много, надеюсь, у некоторых из вас хватило смелости прочитать меня!

Заранее спасибо,

Нолхиан

1 Ответ

1 голос
/ 07 ноября 2011

Только частичный ответ, так как я не использую MongoDB.

  1. Я использую django-nonrel в проекте Google AppEngine. Я использую другие пользовательские приложения, такие как "djangotoolbox" и некоторые бэкэнды для GAE. Панель администратора и стандартная аутентификация Django работают очень хорошо. Я подозреваю, что то же самое для MongoDB (как упомянуто в приведенной вами цитате)

  2. Ты прав. Стандартный подход определенно хорош для реляционных баз данных, но может не работать или работать неэффективно для баз данных NoSQL. Типичным сценарием является дублирование данных в другой таблице, поэтому вам не нужно выполнять СОЕДИНЕНИЯ. Я думаю, что вы можете просто создать подкласс модели User и добавить свои поля в свою пользовательскую модель ( docs ).

...