Question

J'intégration MongoDB en utilisant MongoEngine. Il apporte un soutien auth et session une configuration standard pymongo manquerait.

Dans auth régulière django, il est considéré comme une mauvaise pratique d'étendre le modèle de l'utilisateur car il n'y a aucune garantie qu'il sera utilisé correctement partout. Est-ce le cas mongoengine.django.auth?

Si elle est considéré comme une mauvaise pratique, quelle est la meilleure façon de joindre un profil d'utilisateur distinct? Django a des mécanismes pour spécifier un AUTH_PROFILE_MODULE. Est-ce pris en charge MongoEngine aussi bien, ou dois-je faire manuellement la recherche?

Était-ce utile?

Autres conseils

Nous venons de étendu la classe utilisateur.

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

Dans Django 1.5, vous pouvez désormais utiliser un objet configurable par l'utilisateur, de sorte que c'est une excellente raison de ne pas utiliser un objet distinct et je pense qu'il est sûr de dire que ce n'est considéré comme une mauvaise pratique plus d'étendre le modèle d'utilisateur si vous êtes sur Django <1.5 mais attendant de mettre à niveau à un moment donné. Dans Django 1.5, l'objet utilisateur configurable est configuré avec:

AUTH_USER_MODEL = 'myapp.MyUser'

dans votre settings.py. Si vous changez d'une configuration utilisateur précédent, il y a des changements que la collecte d'impact de nommage etc. Si vous ne voulez pas passer à 1,5 pour l'instant, vous pouvez étendre l'objet utilisateur pour l'instant, puis le mettre à jour plus tard, lorsque vous faites mise à niveau 1.5.

https://docs.djangoproject.com/en / dev / sujets / auth / # auth-utilisateur personnalisé

N.B.. Je ne l'ai pas essayé personnellement cela dans Django 1.5 w / MongoEngine, mais attendez-vous qu'il devrait le soutenir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top