一:用户个人信息展示:
1:给user的模型类增加字段,重新进行迁移建表。
email_active = models.BooleanField(default=False,
verbose_name='邮箱验证状态')
python3 manage.py makemigration
python3 manage.py migrate
2:显示个人信息的视图和路由:
视图: users.views.UserInfoView
class UserInfoView(View):
def get(self, request):
user = request.user
info_data = {
"username" : user.username,
"mobile": user.mmobile,
"email": user.email,
"email_active": user.email_active,
}
return JsonResponse({
"code": 0,
"errmsg": "ok",
"info_data": info_data,
})
3:路由:
path('info/', views.UserInfoView.as_view()),
4:效果:

二:添加和验证邮箱:
1:添加邮箱视图:
逻辑分析:前端传来json数据,从数据中拿到email,写入数据库。
class EmailView(View):
def put(self, request):
user = request.user
data = json.loads(request.body.decode())
email = data.get("email")
if not email:
return JsonResponse({
"code": 400,
"errmsg": "缺失参数"
})
if not re.match("",email):
return JsonResponse({
"code": 400,
"errmsg": "邮箱格式不正确"
})
try:
user.email = email
user.save()
except Exception as e:
return JsonResponse({
"code": 400,
"errmsg": "数据库错误"
})
return JsonResponse({
"code": 400,
"errmsg": "ok"
})
2:路由:path('emails/', views.EmailView.as_view()),
3:验证结果:


2:验证邮箱的配置: dev.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 我们使用的 smtp服务器 地址
EMAIL_HOST = 'smtp.163.com'
# 端口号
EMAIL_PORT = 25
# 下面的内容是可变的, 随后台设置的不同而改变:
# 发送邮件的邮箱
EMAIL_HOST_USER = '17852032949@163.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'JWYWWUXXCQSAYFTYSSZ'
# 收件人看到的发件人
EMAIL_FROM = '美多商城<17852032949@163.com>'
3:使用异步发送邮件:
3.1:在 celery_tasks.email.tasks.py 中添加如下代码:
from django.core.mail import send_mail
from django.conf import settings
import logging
logger = logging.getLogger('django')
from celery_tasks.main import celery_app
# 定义一个发送函数, 发送 email:
@celery_app.task(name='send_verify_email')
def send_verify_email(to_email, verify_url):
# 标题
subject = "美多商城邮箱验证"
# 发送内容:
html_message = '<p>尊敬的用户您好!</p>' \
'<p>感谢您使用美多商城。</p>' \
'<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
'<p><a href="%s">%s<a></p>' % (to_email, verify_url, verify_url)
# 进行发送
result = send_mail(subject,
"",
settings.EMAIL_FROM,
[to_email],
html_message=html_message)
return result
3.2:在main.py中注册task
celery_app.autodiscover_tasks(['celery_tasks.sms', 'celery_tasks.email'])
3.3:由于在email/tasks中用到了django的配置文件,但是异步任务不会主动寻找django的配置文件,所以需要在main.py中配置一下加载django的配置文件。
if not os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = 'meiduo_mall.settings.dev'
3.4:调用发送邮件异步任务:apps/users/views/EmailView.py
# # 调用发送的函数:
# verify_url = '邮件验证链接'
# send_verify_email.delay(email, verify_url)
# 用定义好的函数替换原来的字符串:
verify_url = generate_verify_email_url(request)
# 发送验证链接:
send_verify_email.delay(email, verify_url)
3.5:在users.utils.py中封装生成激活链接的函数:
from django.conf import settings
from meiduo_mall.utils.secret import SecretOauth
# 2.生成激活链接
def generate_verify_email_url(request):
# 1.user_id email
data_dict = {
'user_id': request.user.id,
'email': request.user.email
}
# 2.将参数加密
dumps_data = SecretOauth().dumps(data_dict)
# 3.拼接 完整的激活路由
verify_url = settings.EMAIL_VERIFY_URL + dumps_data
return verify_url
3.6:在dev中配置邮箱验证链接:
EMAIL_VERIFY_URL = 'http://www.meiduo.site:8080/success_verify_email.html?token='
3.7:启动异步进行验证:
celery -A celery_tasks.main worker -l info
浙公网安备 33010602011771号