我正在使用django-registration软件包。我不想让用户输入用户名,而是输入他们的名字和姓氏。就像在Facebook上一样。我怎样才能做到这一点 ?Django注册,名字和姓氏,没有用户名
1
A
回答
2
Django身份验证(和扩展管理员)需要一个用户名 - 句号。所以你必须付出一些努力来解决这个问题。
您有几个问题需要考虑: 1)名字姓将会很快导致冲突。当第二个“John Smith”想要注册时,你的服务做什么?
2)您必须创建一个用户名,因此您可能会使用firstname_lastname的散列。再次,当你第二次完全匹配时,你会做什么?
3)您将不得不编写自定义auth后端来处理登录,这实际上并不困难。
解决方案#2的原型可以找到here - 基本上在表单处理中,生成一个随机唯一的散列。
while True:
self.cleaned_data['username'] = str(md5(str(self.data['email']) + str(random.random())).hexdigest())[0:30]
try:
user = User.objects.get(username__iexact=self.cleaned_data['username'])
except User.DoesNotExist:
break
2
您需要定义自己的AUTHENTICATION_BACKEND和settings.py中声明它: 即:
AUTHENTICATION_BACKENDS = (
'yourapp.backends.NoUsernameModelBackend',
)
的代码应该是这样的:
class NoUsernameModelBackend
def authenticate(self, first_name=None,last_name, password=None):
try:
user = User.objects.get(first_name=first_name,last_name=last_name)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
然后,你需要定义您自己的AuthenticationForm以获取first_name和last_name而不是用户名,并相应地定义url模式。
在网址:
(r'^login/?$','django.contrib.auth.views.login', {'authentication_form':'FullNameAuthenticationForm'}, 'login'),
相关问题
- 1. Django rest-auth allauth注册电子邮件,名字和姓氏,没有用户名
- 2. Django注册:要求输入名字/姓氏的账户?
- 3. CTFontManagerRegisterGraphicsFont没有注册姓氏
- 4. 在注册期间更新名字和姓氏 - Django CMS
- 5. 用名字和姓氏查找姓名
- 6. OpsHub - 用户映射 - 名字姓氏vs(Azure)姓氏,名字
- 7. 名字和姓氏中的Split姓氏
- 8. 发现用户的名字和姓氏?
- 9. 添加用户的姓氏和名字
- 10. Keycloak在注册屏幕上删除名字和姓氏字段
- 11. django queryset - 搜索名字和姓氏
- 12. Django:显示名字和姓氏
- 13. 根据姓名和姓氏生成唯一的注册码
- 14. 将姓氏和名字添加到Wordpress注册表
- 15. 添加名字和姓氏来设计注册表格
- 16. :姓名,姓氏:姓名
- 17. 提取名字和姓氏
- 18. MVC User.Identity.Name,姓氏和名字
- 19. 搜索名字和姓氏
- 20. 单名文本框中的名字和姓氏的姓氏
- 21. Django Q通过用户名,名字和/或姓氏找到用户
- 22. 更改姓氏,名字到姓氏,FirstInitial
- 23. 仅提取姓氏名字,姓氏
- 24. 分割名称为名字和姓氏
- 25. Bluesnap卡持有人名字和姓氏
- 26. 从twitter获取用户名和姓氏
- 27. django:添加用户弹出。缺少字段(名字,姓氏)
- 28. 从名字和姓氏生成唯一的用户名?
- 29. 使用jquery颠倒姓氏和名字
- 30. SQL Server - 在名字和姓氏字段中搜索姓名
我非常感谢你。 – Jim 2011-05-09 21:24:31
我不能只使用电子邮件地址作为用户名吗? – Jim 2011-05-09 21:26:09
@jim您不能使用电子邮件,因为该字段太小(30个字符),并且字段验证不接受@。但是你可以用_替换@或者其他东西,如果地址太长,特殊情况会处理碰撞。您仍然需要自定义身份验证。 – 2011-05-09 21:46:47