【愚公系列】2022年01月 Django商城项目15-用户中心-发送邮件验证功能实现
【摘要】 前言邮箱进行验证主要是为了保证联系信息的有效性,方便您后续找回用户名、密码,同时也可以让您及时接收到系统的相关操作消息。所以邮箱验证是很重要的一个功能。 一、相关代码 1.业务逻辑相关代码class EmailView(LoginRequiredJSONMixin,View): def get(self,request): data = json.loads(reque...
前言
邮箱进行验证主要是为了保证联系信息的有效性,方便您后续找回用户名、密码,同时也可以让您及时接收到系统的相关操作消息。所以邮箱验证是很重要的一个功能。
一、相关代码
1.业务逻辑相关代码
class EmailView(LoginRequiredJSONMixin,View):
def get(self,request):
data = json.loads(request.body.decode())
email = data.get('email')
if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',email):
return http.JsonResponse({'code':RETCODE.PARAMERR,'errmsg':'参数错误'})
try:
request.user.email=email
request.user.save()
except Exception as e:
return http.JsonResponse({'code':RETCODE.DBERR,'errmsg':'数据保存失败'})
verify_url = active_email_url(email,request.user.id)
# celery发送邮件
from celery_tasks.email.tasks import send_active_email
send_active_email.delay(email,verify_url)
return http.JsonResponse({'code':RETCODE.OK,'errmsg':'ok'})
2.celery发送邮件相关代码
from django.core.mail import send_mail
from DJ_MeiDuo import settings
from celery_tasks.main import app
@app.task(bind=True)
def send_active_email(self,email,verify_url):
# subject, message, from_email, recipient_list,
# subject, 主题
subject = '小徐商场激活邮件'
# message, 邮件内容
message = ''
# from_email, 谁发送的
from_email = settings.EMAIL_FROM
# recipient_list, 收件人列表
recipient_list = [email]
# 有格式的内容
html_message = '<p>尊敬的用户您好!</p>' \
'<p>感谢您使用小徐商城。</p>' \
'<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
'<p><a href="%s">%s<a></p>' % (email, verify_url, verify_url)
try:
send_mail(
subject=subject,
message=message,
from_email=from_email,
recipient_list=recipient_list,
html_message=html_message
)
except Exception as e:
self.retry(exc=e)
调用django的邮箱发送需要在setting下配置
# 指定邮件发送后端
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 邮件服务器
EMAIL_HOST = 'smtp.qq.com'
# smtp 默认端口号是 25
EMAIL_PORT = 25
#发送邮件的邮箱
EMAIL_HOST_USER = '2528877987@qq.com'
#在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = '自己的授权码'
#收件人看到的发件人
EMAIL_FROM = '小徐商城<2528877987@qq.com>'
启动celery
celery -A celery_tasks.main worker -l info -P gevent
邮件发送成功
3.激活邮件相关代码
class EmailActiveView(View):
def get(self,request):
token = request.GET.get('token')
if token is None:
return http.HttpResponseBadRequest('缺少参数')
user = check_email_active_token(token)
if user is None:
return http.HttpResponseBadRequest('没有此用户')
user.email_active=True
user.save()
return redirect(reverse('users:center'))
至此邮件激活成功
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)