هل من الممارسات السيئة تمديد وثيقة مستخدم Mongoengine؟
-
21-09-2019 - |
سؤال
أنا دمج 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'
في الإعدادات الخاصة بك. إذا كنت تتغير من تكوين مستخدم سابق ، فهناك تغييرات تسمية مجموعة التأثير وما إلى ذلك. إذا كنت لا ترغب في الترقية إلى 1.5 حتى الآن ، يمكنك تمديد كائن المستخدم في الوقت الحالي ، ثم تحديثه لاحقًا عندما تفعل ذلك ترقية إلى 1.5.
https://docs.djangoproject.com/en/dev/topics/auth/#auth-custom-user
NB لم أجرب هذا شخصيًا في Django 1.5 W/ Mongoengine ، لكن أتوقع أن يدعمه.