Es una mala práctica de extender el documento MongoEngine usuario?
-
21-09-2019 - |
Pregunta
Estoy usando la integración de MongoDB MongoEngine. Proporciona soporte de autenticación y sesión que una configuración estándar pymongo carecería.
En auth Django regular, se considera mala práctica de extender el modelo del usuario ya que no hay ninguna garantía de que será utilizado correctamente en todas partes. Es este el caso con mongoengine.django.auth
?
Si es considera una mala práctica, ¿cuál es la mejor manera de unir un perfil de usuario diferente? Django tiene mecanismos para especificar un AUTH_PROFILE_MODULE
. Es esta soportado en MongoEngine así, o debería estar haciendo manualmente las operaciones de búsqueda?
Solución
MongoEngine ahora soporta AUTH_PROFILE_MODULE
https://github.com/ruandao/mongoengine_django_contrib_auth/ blob / maestro / models.py # L134-163
Otros consejos
Sólo ampliada la clase de usuario.
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
En Django 1.5 ahora se puede utilizar un objeto configurable por el usuario, por lo que es una gran razón para no usar un objeto separado y yo creo que es seguro decir que ya no se considera una mala práctica de extender el modelo de usuario si está en Django <1,5 pero esperando a actualizar en algún momento. En Django 1.5, el objeto de usuario configurable está configurado con:
AUTH_USER_MODEL = 'myapp.MyUser'
en su settings.py. Si va a cambiar de una configuración de usuario anterior, hay cambios que la recolección de impacto de nombres, etc. Si no desea actualizar a 1.5 por el momento, se puede extender el objeto usuario, por ahora, y luego actualizarlo más tarde cuando lo hace actualizar a 1.5.
https://docs.djangoproject.com/en / dev / temas / auth / auth #-aduana-usuario
N.B. No he probado personalmente esto en Django 1.5 w / MongoEngine, pero se espera que debería apoyarlo.