cut*_*eth 7 python passwords django user-accounts django-allauth
是否可以使用电子邮件作为用户名创建用户帐户,而没有其他详细信息,例如使用allauth的密码?目的是使注册过程尽可能简单.注册时可以跳过密码并在电子邮件确认时更新吗?我在python shell(./manage.py shell)中尝试了这个场景并且有成功的输出.
In [1]: from django.contrib.auth.models import User
In [2]: User.objects.create(username='nopass')
Out[2]: <User: nopass>
In [3]: User.objects.all()
Out[3]: [<User: userone>, <User: nopass>]
In [4]: usr=User.objects.all()[1]
In [5]: usr.set_password('pwdnotset')
In [6]: usr.save()
In [7]: from django.contrib.auth import authenticate
In [8]: authenticate(username='nopass',password='pwdnotset')
Out[8]: <User: nopass>
Run Code Online (Sandbox Code Playgroud)
我已经提到过这个链接,发现当时没有这样的设置.然而,回复是在2013年发布的.如果设计了一种在注册时使用某些allauth配置创建没有密码的用户的方法,将会很有帮助.提前致谢.
我认为creating a signup form with an overridden signup() which sets an unusable password to user并说 allauth 使用该表格进行注册过程将解决这个问题。通过重写signup() 创建一个注册表单,如下所示。
class UserCreationForm(forms.ModelForm):
username = forms.CharField(label=_("username"))
# declare other fields also
...
def signup(self, request, user):
user.username = self.cleaned_data['username']
# make sure you are saving all needed data for user model.
user.set_unusable_password()
user.save()
Run Code Online (Sandbox Code Playgroud)
在 settings.py 中,告诉 allauth 使用该表单进行注册
ACCOUNT_SIGNUP_FORM_CLASS = 'yourapp.forms.UserCreationForm'
Run Code Online (Sandbox Code Playgroud)
下面给出的是上述上下文的 ipdb 堆栈跟踪。
48 import ipdb;ipdb.set_trace();
---> 49 user.email = self.cleaned_data['email']
50 user.username = self.cleaned_data['username']
ipdb> user
<User: test_user>
ipdb> user.save()
*** IntegrityError: NOT NULL constraint failed: user.password
ipdb> user.set_unusable_password()
ipdb> user.save()
ipdb> user
<User: test_user>
ipdb>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |