您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

django-allauth设置用户名与电子邮件相同

django-allauth设置用户名与电子邮件相同

我完全按照用户pre_save上的信号进行操作。

您的设置看起来不错,因此,如果您将以下代码添加到某个地方(例如core.models.py,它将在需要时运行):

@receiver(pre_save, sender=User)
def update_username_from_email(sender, instance, **kwargs):
    user_email = instance.email
    username = user_email[:30]
    n = 1
    while User.objects.exclude(pk=instance.pk).filter(username=username).exists():
        n += 1
        username = user_email[:(29 - len(str(n)))] + '-' + str(n)
    instance.username = username

我这样做的原因是我希望每次保存用户时都更新用户名。您可以仅在这种情况下检查电子邮件是否已更改,请更新用户名。

然后,我将用户名限制为电子邮件的前30个字符(用户名认最大长度为30个字符):

username = user_email[:30]

您也可以更改用户名的最大长度,但是在我的情况下,我更喜欢使用认长度。

自从我这样做以来,可能会发生重复的用户名。为了避免重复的用户名,如果将生成用户名限制为30个字符后已经存在,我在末尾放置-2,-3 …以使用户名唯一:

n = 1
while User.objects.exclude(pk=instance.pk).filter(username=username).exists():
    n += 1
    username = user_email[:(29 - len(str(n)))] + '-' + str(n)
instance.username = username

希望此解决方案对您有所帮助!

Go 2022/1/1 18:48:34 有330人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶