def put(self, request): ''' 实现添加邮箱逻辑 :param request: :return: ''' json_str = request.body.decode() json_dict = json.loads(json_str) email = json_dict.get('email') # 校验参数 ---->正则 if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return HttpResponseForbidden('参数email有误') # 给 email 赋值 try: request.user.email = email request.user.save() except Exception as e: logger.error(e) return JsonResponse({'code': RETCODE.EMAILERR, 'errmsg': '添加邮箱失败'}) # 4.异步发送邮件 verify_url = generate_verify_email_url(request.user) from celery_tasks.email.tasks import send_verify_email send_verify_email.delay(email, verify_url) return JsonResponse({'code': RETCODE.OK, 'errmsg': '添加邮箱成功'})
def put(self,request): '''实现邮箱添加逻辑''' # 接收参数 json_str = request.body.decode() json_dict = json.loads(json_str) email = json_dict['email'] print("邮箱是:",email) # 校验参数 if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return http.HttpResponseForbidden('参数email有误') # 赋值email字段 try: request.user.email = email request.user.save() except Exception as e: logger.error(e) return http.JsonResponse({'code': RETCODE.DBERR, 'errmsg': '添加邮箱失败'}) # 拼接url from apps.users.utils import generate_verify_email_url verify_url = generate_verify_email_url(request.user) # 4.异步发送邮件 from celery_tasks.email.tasks import send_verify_email send_verify_email.delay(email, verify_url) # 5.响应添加邮箱结果 return http.JsonResponse({'code': RETCODE.OK, 'errmsg': '添加邮箱成功'})
def put(self, request): # 1接受body数据 body_datas = request.body # 1.1把接受的bytes===>json数据 json_datas = body_datas.decode() # 1.2把json转化为dict dict_datas = json.loads(json_datas) # 1.3获取数据 email = dict_datas.get('email') # 2.验证数据 # 2.1邮箱地址是否存在,符合规则 if not email: return http.HttpResponseBadRequest('缺少email参数') if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return http.HttpResponseBadRequest('参数email有误') # 3.更新数据(email数据) #成功则保存 #不成功则更新失败 try: request.user.email = email request.user.save() except Exception as e: logger.error(e) # raise self.retry(exc=e, max_retries=3) return http.JsonResponse({'code': RETCODE.DBERR, 'errmsg': '更新失败'}) # 4.发送激活邮件 # 4.1准备发送邮箱数据(主题,消息,发件人,收件人(列表),内容) # subject = '美多商城激活邮件' # message = '' # from_email = '美多商城<*****@*****.**>' # recipient_list = [email] # html_message = "<a href='#'>有思路,不纠结</a>" # # # 4.2发送数据 # send_mail( # subject=subject, # message=message, # from_email=from_email, # recipient_list=recipient_list, # html_message=html_message # ) # 4.2改为celery发送数据 # 异步发送验证邮件 # 4+验证邮箱的后端实现(加密) # verify_url = '邮件验证链接' verify_url = generate_verify_email_url(request.user) #4.异步发送邮件验证 from celery_tasks.email.tasks import send_verify_email send_verify_email.delay(email, verify_url) # 5.返回响应 return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK'})
def put(self, request): # 1.接收参数 email json email = json.loads(request.body.decode()).get('email') # 2.修改 用户 的 emailshuxi属性 request.user.email = email request.user.save() # 保存邮箱成功之后 发送邮件--网易发送---耗时任务--celery # 获取激活链接 verify_url = generate_verify_email_url(request.user) from celery_tasks.email.tasks import send_verify_email send_verify_email.delay(email, verify_url) # 3.返回结果 return http.JsonResponse({'code': RETCODE.OK, 'errmsg': '添加邮箱成功'})
def put(self, request): # 1. 接收参数 json_dict = json.loads(request.body.decode()) email = json_dict.get('email') # 2. 校验 if not email: return http.JsonResponse({'code': 400, 'errmsg': '缺少email参数'}) if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return http.JsonResponse({'code': 400, 'errmsg': '参数email格式有误'}) # 3.添加email try: request.user.email = email request.user.save() except Exception as e: logger.error(e) return http.JsonResponse({'code': 400, 'errmsg': '添加失败'}) # 4. * 最核心代码:服务端生成URL链接地址给网易stmp邮件中转站 email_verify_url = generate_verify_email_url(request.user) send_verify_email_url.delay(email, email_verify_url) return http.JsonResponse({'code': 0, 'errmsg': 'ok'})
def put(self, request): # 1.接收参数 email = json.loads(request.body.decode()).get('email') # 2.正则校验 # 3.修改 User.objects.filter().update(email=email) # request.user request.user.email = email request.user.save() # 发邮件的功能 # 生成 激活链接 from apps.users.utils import generate_verify_email_url verify_url = generate_verify_email_url(request.user) from celery_tasks.email.tasks import send_verify_email send_verify_email.delay(email, verify_url) # 4.返回响应对象 return http.JsonResponse({'code': RETCODE.OK, 'errmsg': '添加邮箱成功'})
def put(self, request): """实现添加邮箱逻辑""" # 接收axios body = request.body body_str = body.decode() data = json.loads(body_str) # 检验参数 email = data.get('email') if not email: return http.HttpResponseBadRequest('缺少email参数') if not re.match(r"^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$", email): return http.HttpResponseBadRequest('email参数有误') # 更新数据 try: request.user.email = email request.user.save() except Exception as e: logger.error(e) return http.JsonResponse({'code': 0, 'errmsg': '添加邮箱失败'}) # 给邮箱发送链接 # from django.core.mail import send_mail # # subject, message, from_email, recipient_list # subject = "美多商城激活邮件" # message = "" # from_email = "欢乐玩家<*****@*****.**>" # # 收件人列表 # recipient_list = ["*****@*****.**"] # html_message = "<a href='http://www.huyouni.com'>戳我有惊喜</a>" # send_mail(subject=subject, # message=message, # from_email=from_email, # recipient_list=recipient_list, # html_message=html_message) # 异步发送验证邮件 from celery_tasks.email.tasks import send_verify_email verify_url = generate_verify_email_url(request.user) send_verify_email.delay(email, verify_url) # 响应添加邮箱结果 return http.JsonResponse({"code": 0, "errmsg": "添加邮箱成功"})
def put(self, request): """ 1.接收参数 2.获取参数 3.验证参数 4.更新数据 5.返回相应 """ # 1.接收参数 data = request.body body_str = data.decode() params = json.loads(body_str) # 2.获取参数 email = params.get('email') # 3.验证参数 if not email: return http.HttpResponseBadRequest('参数不能省略') if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return http.HttpResponseBadRequest('参数不符合规则') # 4.更新数据 try: request.user.email = email request.user.save() except Exception as e: logger.error(e) return http.JsonResponse({ 'code': RETCODE.DBERR, 'errmsg': '添加邮箱失败' }) #发送邮件 from celery_tasks.email.tasks import send_verify_email verify_email = generate_verify_email_url(request.user) send_verify_email.delay(email, verify_email) # 5.返回相应 return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'ok'})
def put(self, request): # 1.接收参数 email email = json.loads(request.body.decode()).get('email') # 2.校验邮箱 正则 # 3. 存到该用户的email属性 try: request.user.email = email request.user.save() except Exception as e: return JsonResponse({'code': RETCODE.EMAILERR, 'errmsg': '添加邮箱失败'}) # 发邮件 耗时操作 from apps.users.utils import generate_verify_email_url verify_url = generate_verify_email_url(request.user) from celery_tasks.email.tasks import send_verify_email send_verify_email.delay(email, verify_url) # 4. 返回前端的数据响应 return JsonResponse({'code': RETCODE.OK, 'errmsg': '添加邮箱成功'})
def put(self, request): """实现添加邮箱逻辑""" # 接收参数 json_dict = json.loads(request.body.decode()) email = json_dict.get('email') # 校验参数 if not email: return http.JsonResponse({'code': 400, 'errmsg': '缺少email参数'}) if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return http.JsonResponse({'code': 400, 'errmsg': '参数email有误'}) # django发送邮件服务器设置 # 发送激活邮件 # from django.core.mail import send_mail # subject = '主题' # message = '' # from_email = '美多商城<*****@*****.**>' # recipient_list = [email] # html_message = '<a href="#">点击激活</a>' # send_mail( # subject, # message, # from_email, # recipient_list, # html_message, # ) from celery_tasks.email.tasks import send_verify_email verify_url = generate_verify_email_url(request.user) send_verify_email.delay(email, verify_url) # 赋值email字段 user = request.user user.email = email user.save() # 响应添加邮箱结果 return http.JsonResponse({'code': 0, 'errmsg': '添加邮箱成功'})