下面是详细讲解"Django发送邮件和itsdangerous模块的配合使用解析"的攻略。
1. 安装依赖
在Django项目中引入邮件和itsdangerous模块,可以通过pip命令安装依赖:
pip install django django-mailer itsdangerous
2. 配置邮件发送参数
在Django项目的settings文件中进行邮件配置
# settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.xxx.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'xx@xxx.com'
EMAIL_HOST_PASSWORD = 'xxxx'
EMAIL_USE_SSL = False
DEFAULT_FROM_EMAIL = 'xx@xxx.com'
SERVER_EMAIL = 'xx@xxx.com'
其中,EMAIL_BACKEND表示使用的邮件发送后端方式;EMAIL_HOST表示邮件发送的smtp的地址;EMAIL_PORT表示smtp的端口号;EMAIL_HOST_USER表示smtp登录账号;EMAIL_HOST_PASSWORD表示smtp登录密码;EMAIL_USE_SSL表示是否使用SSL加密;DEFAULT_FROM_EMAIL表示发送邮件的默认邮箱;SERVER_EMAIL表示提供服务的邮箱。
3. 发送邮件
使用Django内置的mail.send_mail函数发送邮件
from django.core.mail import send_mail
# ...省略部分代码...
send_mail(
subject='激活邮件',
message='恭喜你注册成功,点击下面链接激活账户:\nhttp://127.0.0.1:8000/user/active/%s' % token,
from_email='xx@xxx.com',
recipient_list=[email],
fail_silently=False
)
send_mail函数的参数分别表示邮件主题、邮件内容、发件人邮箱、收件人邮箱列表、发送失败时是否抛出异常。其中,message参数可以放置我们的链接地址token。
4. 生成token
在用户注册成功后,可以使用itsdangerous模块生成携带用户信息的token。
from itsdangerous import URLSafeTimedSerializer
# ...省略部分代码...
seri = URLSafeTimedSerializer(settings.SECRET_KEY)
token = seri.dumps({'email': email}).decode('utf8')
其中,URLSafeTimedSerializer是itsdangerous模块中的对象,SECRET_KEY表示Django项目中的密钥,dumps方法根据传入的字典生成携带用户信息的token。
5. 解析token
当用户点击激活链接时,我们可以通过itsdangerous模块的loads方法解析token,并进行相应的权限验证与处理。
from itsdangerous import URLSafeTimedSerializer, SignatureExpired
# ...省略部分代码...
seri = URLSafeTimedSerializer(settings.SECRET_KEY)
try:
email = seri.loads(token, max_age=3600) # max_age过期时间,单位是秒
except SignatureExpired:
# 处理过期异常
pass
else:
# 进行账户激活处理
pass
loads方法的参数分别为token和过期时间,如果token过期则会抛出SignatureExpired异常。而在except中处理异常时如果希望展现给用户一个较为友好的界面,我们也可以在程序中增加合理的响应和提示。
示例1
下面为完整的发送邮件和生成token的示例代码:
from django.core.mail import send_mail
from itsdangerous import URLSafeTimedSerializer
from django.conf import settings
def send_active_email(email):
seri = URLSafeTimedSerializer(settings.SECRET_KEY)
token = seri.dumps({'email': email}).decode('utf8')
send_mail(
subject='激活邮件',
message='恭喜你注册成功,点击下面链接激活账户:\nhttp://127.0.0.1:8000/user/active/%s' % token,
html_message='恭喜你注册成功,点击下面链接激活账户:<a href="http://127.0.0.1:8000/user/active/%s" target="_blank">http://127.0.0.1:8000/user/active/%s</a>' % (token, token),
from_email='xx@xxx.com',
recipient_list=[email],
fail_silently=False
)
示例2
下面为完整的解析token的示例代码:
from itsdangerous import URLSafeTimedSerializer, SignatureExpired
from django.conf import settings
def active_user(token):
seri = URLSafeTimedSerializer(settings.SECRET_KEY)
try:
email = seri.loads(token, max_age=3600) # max_age过期时间,单位是秒
except SignatureExpired:
# 过期处理
pass
else:
# 进行账户激活处理
pass
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django发送邮件和itsdangerous模块的配合使用解析 - Python技术站