Является ли плохой практикой расширение пользовательского документа MongoEngine?

StackOverflow https://stackoverflow.com/questions/2481811

Вопрос

Я интегрирую MongoDB с помощью MongoEngine.Он обеспечивает аутентификацию и поддержку сеанса, которых не хватало бы стандартной настройке pymongo.

В обычной аутентификации django расширение пользовательской модели считается плохой практикой, поскольку нет гарантии, что она будет использоваться корректно везде.Так ли это в случае с mongoengine.django.auth?

Если это является считающийся плохой практикой, какой наилучший способ прикрепить отдельный профиль пользователя?В Django есть механизмы для указания AUTH_PROFILE_MODULE.Поддерживается ли это также в MongoEngine, или я должен вручную выполнять поиск?

Это было полезно?

Решение

MongoEngine теперь поддерживает AUTH_PROFILE_MODULE

https://github.com/ruandao/mongoengine_django_contrib_auth/blob/master/models.py#L134-163

Другие советы

Мы просто расширенный класс пользователя.

class User(MongoEngineUser):
    def __eq__(self, other):
        if type(other) is User:
            return other.id == self.id
        return False

    def __ne__(self, other):
        return not self.__eq__(other)

    def create_profile(self, *args, **kwargs):
        profile = Profile(user=self, *args, **kwargs)
        return profile

    def get_profile(self):
        try:
            profile = Profile.objects.get(user=self)
        except DoesNotExist:
            profile = Profile(user=self)
            profile.save()
        return profile

    def get_str_id(self):
        return str(self.id)

    @classmethod
    def create_user(cls, username, password, email=None):
        """Create (and save) a new user with the given username, password and
email address.
"""
        now = datetime.datetime.now()

        # Normalize the address by lowercasing the domain part of the email
        # address.
        # Not sure why we'r allowing null email when its not allowed in django
        if email is not None:
            try:
                email_name, domain_part = email.strip().split('@', 1)
            except ValueError:
                pass
            else:
                email = '@'.join([email_name, domain_part.lower()])

        user = User(username=username, email=email, date_joined=now)
        user.set_password(password)
        user.save()
        return user

В Django 1.5 теперь вы можете использовать настраиваемый пользовательский объект, так что это отличная причина не использовать отдельный объект, и я думаю, можно с уверенностью сказать, что расширение пользовательской модели больше не считается плохой практикой, если вы используете Django <1.5, но ожидаю обновления в какой-то момент.В Django 1.5 настраиваемый пользовательский объект устанавливается с помощью:

AUTH_USER_MODEL = 'myapp.MyUser'

в твоем settings.py.Если вы переходите от предыдущей конфигурации пользователя, происходят изменения, которые влияют на именование коллекции и т.д.Если вы пока не хотите обновляться до версии 1.5, вы можете пока расширить пользовательский объект, а затем обновить его позже, когда будете выполнять обновление до версии 1.5.

https://docs.djangoproject.com/en/dev/topics/auth/#auth-custom-user

Н.Б.Я лично не пробовал это в Django 1.5 w / MongoEngine, но ожидаю, что он должен это поддерживать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top