这个问题专门针对Django 2.0的答案,因为registration
模块还没有提供。
- 更多,这可能看起来很宽泛,但我经常发现自己在我不能使用任何第三方模块的情况下,因为...哦,好吧..政策。我相信很多人这样做。我知道,寻找和整理从这里或django文档的信息是一个头痛。*
工作流程:
假设我们需要以下流程:
1.用户转到注册页面并填写以下字段:first_name
、last_name
和email
(电子邮件将用作用户名)。
1.用户提交表单并收到一封确认电子邮件,其中包含一个包含唯一令牌的URL。
1.当用户点击接收到的链接时,他将被重定向到一个页面,在那里他将设置他的密码。完成后,他将登录到 Jmeter 板页面。
- 额外信息:用户稍后将使用其电子邮件(实际上是其用户名)和密码登录。*
具体问题:
- 模型/视图(使用CBV)/表单/URL看起来如何?
4条答案
按热度按时间cbwuti441#
用户模型
首先,您需要创建一个自定义的
User
模型和一个自定义的UserManager
,以删除username
字段并使用email
。在
models.py
中,UserManager
应如下所示:而
User
型号:最后在
settings.py
中:令牌生成器
第二部分是为电子邮件确认网址创建一个令牌生成器。我们可以继承内置的
PasswordResetTokenGenerator
,使之更容易。创建
tokens.py
:注册表单
最好的方法是继承Django内置的
UserCreationForm
,删除其中的username
和password
字段,然后添加一个email
字段。forms.py
:注册视图
在注册过程中,您应该将用户设置为非活动状态
user.is_active = False
,没有密码set_unusable_password()
,直到用户完成激活。另外,我们将创建一个激活URL,并在完成注册后通过电子邮件发送给用户。在
views.py
中:当然,不要忘记为您的注册视图创建一个模板。
激活视图
然后,您应该创建一个视图,让用户使用我们在注册视图中创建的URL来激活他的帐户。我们还将使用内置的Django的
SetPasswordForm
来允许用户设置密码。以
views.py
为单位:同样,不要忘记为激活视图创建一个模板。
URL
最后,在
urls.py
中:P.S.老实说,我还没有机会一起测试所有这些部件,但如果有任何问题发生,请不要犹豫。
o3imoua42#
除了Peter的回答,如果你使用Django 2,那么编码和解码部分会有一些不同。
更改
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
至
'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(),
更改
uid = force_text(urlsafe_base64_decode(uidb64))
至
uid = urlsafe_base64_decode(uidb64).decode()
Django 3编辑:
uid = urlsafe_base64_encode(force_bytes(user.pk))
uid = urlsafe_base64_decode(uidb64).decode()
xv8emn3q3#
您可以呼叫密码重设表单,从要求传递使用者的电子邮件。这会使用内建验证传送链接。您可能想要取代电子邮件和密码表单的预设模板。
非常肯定你需要一个现有的密码,这样你就可以创建一个临时的虚拟密码
l7wslrjt4#
感谢分享,我使用上述方法生成**“Djoser”**激活电子邮件,以及工作。
我修改了以下内容:
我没有创建新的令牌生成器,而是使用了Django内置的令牌生成器,Djoser也使用了它:
你还需要djoser utils:
激活链接根据Django设置中的Djoser激活链接修改: