在Django中删除或禁用用户的用户名

3
有没有一种方法可以完全删除或禁用Django中的用户名?
我只想使用电子邮件和密码。
2个回答

2

您无法禁用它,但是当用户使用电子邮件地址注册时,您可以生成一个随机或基于电子邮件地址的占位符用户名。在您的注册表单的clean()方法中添加类似以下代码将从电子邮件地址创建唯一用户名(因为您不能使用非字母数字字符作为用户名):

highest_user_id = User.objects.all().order_by('-id')[0].id #or something more efficient
leading_part_of_email = user_email.split('@',1)[0]
leading_part_of_email = re.sub(r'[^a-zA-Z0-9+]', '', leading_part_of_email) #remove non-alphanumerics
truncated_part_of_email = leading_part_of_email[:3] + leading_part_of_email[-3:] #first three and last three - will turn "ab@foo.com" into "abab" or b@ into "bb", which is ok
derived_username = '%s%s' % (truncated_part_of_email, highest_user_id+1)

你可以复制django.contrib.auth,浏览它,将模型中的username删除,并用email替换每个引用username的地方。这是一种蛮力的方法,因为身份验证并不真正“内置”于Django中。 - Mike D.

0

自Django 1.2版本以来,用户名可以包含@、+、.和-字符。

只需使用电子邮件地址作为用户名即可。


4
用户名字段只有30个字符,对于一个电子邮件地址来说并不是很多的空间。 - Mark Lavin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接