这篇博客主要是来讲一下我升级过后的用户users模块,从原来的Schnee的users模块继承而来,但是加入了用户邮箱验证等功能。
在新的用户系统中,我默认只能够以合法的邮箱作为用户名来注册,这样能够避免出现奇奇怪怪的用户名,也便于后续的通过邮件激活用户的操作。
用户在网站注册新用户后,会创建一个未激活的新用户(无法登录网站),需要点击通过激活邮件中的链接进行激活后方可登录。
首先是urls设计,包括注册链接以及激活链接:
path('register/', views.user_reg, name = 'register'),
path('active/<str:active_code>', views.user_active, name = 'active'),
修改项目settings.py,添加邮箱部分设置:
EMAIL_HOST = "smtp.sina.com"
EMAIL_PORT = 25
EMAIL_HOST_USER = "xxxxxxxxx@sina.com" # 你的邮箱账号
EMAIL_HOST_PASSWORD = "xxxxxxxxx" # 你的邮箱密码
EMAIL_USE_TLS = False # 这里是 False
EMAIL_FROM = "xxxxxxxxx@sina.com" # 你的邮箱账号
DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER
注意:在这里我用的是新浪的邮箱,经过测试QQ邮箱也可以使用,最初使用163邮箱的时候会发现我的邮件被认为是垃圾邮件(状态码:554 DT:SPM)而不能成功发送出去,多次调试后无果采用其他邮箱。
接下来是视图函数设计,这部分很大程度上参考了杨仕航先生的博客:
from django.core.mail import send_mail
from helper.crypto import encrypt, decrypt
def get_active_code(email):
""" 利用时间及邮箱获取激活码 """
key = 9
encry_str = '%s|%s' % (email, time.strftime('%Y-%m-%d', time.localtime(time.time())))
active_code = encrypt(key, encry_str)
return active_code
def send_active_email(email, active_code):
""" 发送激活邮件