def get(self,request): # 1.接收数据 data = json.loads(request.body.decode()) email = data.get('email') # 2.验证数据 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':'参数错误'}) # 3.保存数据(更新指定用户的邮箱信息) try: request.user.email = email request.user.save() except Exception as e: return http.JsonResponse({'code':RETCODE.DBERR,'errmsg':'数据保存失败'}) from apps.users.utils import active_email_url verify_url = active_email_url(email,request.user.id) from celery_tasks.email.tasks import send_active_email send_active_email.delay(email,verify_url) # 4.1 激活邮件的内容 # 4.2 能够发送激活邮件 # # 5.返回响应 return http.JsonResponse({'code':RETCODE.Ok,'errmsg':'ok'})
def put(self,request): body = request.body body_str = body.decode() data = json.loads(body_str) email = data.get('email') if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return JsonResponse({'code': RETCODE.PARAMERR, 'errmsg': '邮箱不符合规则'}) request.user.email = email request.user.save() # from django.core.mail import send_mail # subject = '美多商场激活邮件' # # message = '' # # from_email = '欢乐玩家<*****@*****.**>' # # recipient_list = [email] # # html_mesage = "<a href='http://www.meiduo.site:8000/emailsactive/?id=%s&email=%s'>戳我有惊喜</a>" % ( # request.user.id, email) # # send_mail(subject=subject, # message=message, # from_email=from_email, # recipient_list=recipient_list, # html_message=html_mesage) from celery_tasks.email.tasks import send_active_email send_active_email.delay(request.user.id,email) return JsonResponse({'code': RETCODE.OK, 'errmsg': 'ok'})
def put(self, request): body = request.body.decode() data = json.loads(body) email = data.get('email') if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return JsonResponse({'code': 5006, 'errmsg': '邮箱不符合规则'}) request.user.email = email request.user.save() from django.core.mail import send_mail # # def send_mail(subject, message, from_email, recipient_list, # fail_silently=False, auth_user=None, auth_password=None, # connection=None, html_message=None): # subject, message, from_email, recipient_list, # subject 主题 # subject = '美多商场激活邮件' # # message, 内容 # message = '' # # from_email, 谁发的 # from_email = '欢乐玩家<*****@*****.**>' # # recipient_list, 收件人列表 # recipient_list = ['*****@*****.**'] # # html_mesage = "<a href='http://www.meiduo.site:8000/emailsactive/?token_id=1'>戳我有惊喜</a>" # # send_mail(subject=subject, # message=message, # from_email=from_email, # recipient_list=recipient_list, # html_message=html_mesage) send_active_email.delay(request.user.id, email) # ⑤ 返回相应 return JsonResponse({'code': 0, 'errmsg': 'ok'})
def put(self, request): # !!!必须是登陆用户才可以访问!!! # ① 接收 axios body = request.body body_str = body.decode() data = json.loads(body_str) # ② 验证 email = data.get('email') if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return JsonResponse({ 'code': RETCODE.PARAMERR, 'errmsg': '邮箱不符合规则' }) # ③ 更新数据 request.user.email = email request.user.save() # ④ 给邮箱发送激活连接 from django.core.mail import send_mail # #subject, message, from_email, recipient_list, # #subject 主题 # subject='美多商场激活邮件' # #message, 内容 # message='' # #from_email, 谁发的 # from_email = '欢乐玩家<*****@*****.**>' # #recipient_list, 收件人列表 # recipient_list = ['*****@*****.**'] # # """ # 1.思考了一下,我们给用户发送邮件的目的是什么 # 目的:用户点击这个连接,让他跳转到指定页面,同时修改这个用户的邮件状态 # 2. 步骤: # ① 有指定的页面 # ② 获取用户 # 3.分析 如何获取用户信息 # 分析: 用户点击哪个连接就是在发送GET请求.我们就应该在GET请求中,传递用户信息 # emailsactive/?user_id=1 # 4. 用户的信息太明显了,我们需要对用户信息 加密 # 5. 加密抽取 # """ # # # 对用户信息进行加密 # active_url=generic_active_email_url(request.user.id,email) # # 用户点击这个连接,让他跳转到指定页面,同时修改这个用户的邮件状态 # html_mesage="<a href='%s'>戳我有惊喜,恭喜你,注册成功,请点击激活</a>"%active_url # # send_mail(subject=subject, # message=message, # from_email=from_email, # recipient_list=recipient_list, # html_message=html_mesage) from celery_tasks.email.tasks import send_active_email send_active_email.delay(request.user.id, email) # ⑤ 返回相应 return JsonResponse({'code': RETCODE.OK, 'errmsg': 'ok'})
def get(self, request): # 1.接收邮箱数据 data = json.loads(request.body.decode()) email = data.get('email') # 2.验证邮箱数据 if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return http.JsonResponse({ 'code': RETCODE.DBERR, 'errmsg': '数据保存失败' }) # 3.保存数据(更新指定用户的邮箱信息) try: request.user.email = email request.user.save() except Exception as e: return http.JsonResponse({ 'code': RETCODE.DBERR, 'errmsg': '数据保存失败' }) # 4.未使用celery,直接发送邮件 """ # 4.发送激活邮件 from django.core.mail import send_mail # 编辑激活邮件的内容 # subject 主题 # message 发送的内容 # from_email 发件人 # recipient_list 收件人邮箱列表 subject = '主题' message = '内容' from_email = settings.EMAIL_FROM recipient_list = [email] html_message = '<h1>你好,王佳星!</h1><br><h2>欢迎来到美多商城!</h2><br>' # 能够发送邮件给用户的邮箱 send_mail( subject = subject, message=message, from_email=from_email, recipient_list=recipient_list, html_message=html_message ) """ # 4.使用celery任务队列异步发动邮件 # todo 切记不能忘了delay,不然不是异步发送!!!!!! verify_url = active_eamil_url(email, request.user.id) send_active_email.delay(email, verify_url) # 5.返回响应 return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK'})
def put(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 JsonResponse({'code': 5006, 'errmsg': '邮箱不符合规则'}) request.user.email = email request.user.save() send_active_email.delay(request.user.id,email) return JsonResponse({'code': 0, 'errmsg': 'ok'})
def update(self, instance, validated_data): email = validated_data['email'] instance.email = email instance.save() url = instance.generate_verify_email_url() send_active_email.delay(email, url) return instance
def put(self, request): body = request.body.decode() data = json.loads(body) email = data.get('email') if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return JsonResponse({"code": RETCODE.PARAMERR, "errmsg": "邮箱格式不对"}) request.user.email = email request.user.save() send_active_email.delay(request.user.id, email) return JsonResponse({"code": RETCODE.OK, "errmsg": "ok"})
def update(self, instance, validated_data): # instance = user #接收邮件信息 email = validated_data.get('email') instance.email=email instance.save() #在这里发送邮件 # from django.core.mail import send_mail # # send_mail(subject, message, from_email, recipient_list,) # # subject, 主题 # subject = '美多商场激活邮件' # # message, 内容 # message = '' # # from_email, 谁发送的 # # 谁发送的 # from_email = '*****@*****.**' # # recipient_list 收件人列表 # recipient_list=[email] # # #生成一个激活的url # verify_url = generate_verify_url(instance.id,email) # # # from mall import settings # # from itsdangerous import TimedJSONWebSignatureSerializer as Serializer # # # # s = Serializer(secret_key=settings.SECRET_KEY,expires_in=3600) # # # # token = s.dumps({'id':instance.id,'email':email}) # # # # # # verify_url = 'http://www.meiduo.site:8080/success_verify_email.html?token=%s'%token.decode() # # # html_message = '<p>尊敬的用户您好!</p>' \ # '<p>感谢您使用美多商城。</p>' \ # '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \ # '<p><a href="%s">%s<a></p>' % (email, verify_url, verify_url) # # send_mail(subject,message,from_email,recipient_list, # html_message=html_message) from celery_tasks.email.tasks import send_active_email send_active_email.delay(email,instance.id) return instance
def update(self, instance, validated_data): # 更新邮箱信息 email = validated_data['email'] instance.email = email instance.save() # 生成激活url email_active_url = instance.general_email_verify_url() # 发送邮件 send_active_email.delay(email, email_active_url) # 返回数据 return instance
def put(self, request): # 1.接收 axios body = request.body body_str = body.decode() # 导入系统json,最后一个json data = json.loads(body_str) # 2.验证 email = data.get('email') if not email: return HttpResponseBadRequest('缺少email参数') if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return JsonResponse({ 'code': RETCODE.PARAMERR, 'errmsg': '邮箱不符合规则' }) # 3.更新数据 request.user.email = email request.user.save() # 4.给邮箱发送激活链接 # 导入服务器 # from django.core.mail import send_mail # subject, message, from_email, recipient_list, # subject 主题 # subject = 'Forever激活邮件' # # message, 内容 # message = '' # # from_email, 谁发的 # from_email = '小姐姐<*****@*****.**>' # # recipient_list, 收件人列表 # recipient_list = ['*****@*****.**'] # # 用户点击链接,,跳转到激成功页面,同时修改用户邮件状态 # # # 对用户加密 # active_url=generic_active_email_url(request.user.id,request.user.email) # # html_mesage = "<a href='http://www.meiduo.site:8000/emailactive/'>戳我有惊喜</a>" # html_mesage = "<a href='%s'>戳我有惊喜</a>"%active_url # # send_mail(subject=subject, message=message, from_email=from_email, recipient_list=recipient_list, html_message=html_mesage) # 任务名.delay 添加到中间人 from celery_tasks.email.tasks import send_active_email send_active_email.delay(request.user.id, email) # 5.返回响应 return JsonResponse({'code': RETCODE.OK, 'errmsg': 'ok'})
def update(self, instance, validated_data): """ 更新保存用户的邮箱地址 :param instance: 视图执行完返回的user用户模型对象会传递到instance中 :param validated_data: 前端传递来,校验完成后的参数 :return: 返回用户对象 """ email = validated_data["email"] instance.email = email instance.save() # 生成激活的url链接 url = instance.generate_verify_email_url() # 使用celery异步队列发送邮件 send_active_email.delay(email, url) return instance
def update(self, instance, validated_data): # instance 视图中传来的user对象 # validated_data 上面验证ok的数据 email = validated_data.get('email') # 保存邮箱到数据库 instance.email = email instance.save() # 生成邮件激活链接地址 verify_url = instance.generate_verify_email_url() # 异步发送邮件 send_active_email.delay(email, verify_url) return instance
def put(self, request): # 2. 接收参数 data = request.data # 3. 验证数据 user = request.user serializer = UserEmailSerializer(instance=user, data=data) serializer.is_valid(raise_exception=True) # 4. 更新数据 serializer.save() from celery_tasks.email.tasks import send_active_email send_active_email.delay(data.get('email'), request.user.id) # 5. 发送激活邮件 # from django.core.mail import send_mail # # subject = '美多商城激活邮件' #主题 # # message = '内容' #内容 # # from_email = settings.EMAIL_FROM #发件人 # # email = data.get('email') # recipient_list = [email] #接收人列表 # # #可以设置一些html的样式等信息 # verify_url = generic_active_url(user.id,email) # # html_message = '<p>尊敬的用户您好!</p>' \ # '<p>感谢您使用美多商城。</p>' \ # '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \ # '<p><a href="%s">%s<a></p>' % (email, verify_url, verify_url) # # send_mail( # subject=subject, # message=message, # from_email=from_email, # recipient_list=recipient_list, # html_message=html_message # ) # 6. 返回响应 return Response(serializer.data)
def update(self, instance, validated_data): """ :param instance: 视图传送过来的user对象 :param validated_data: :return: """ email = validated_data['email'] instance.email = email instance.save() # 生成激活链接 url = instance.generate_verify_email_url() # 发送激活邮件 send_active_email.delay(email, url) return instance
def update(self, instance, validated_data): """ 更新邮箱 :param instance: 当前视图get_object时传递的request.user对象 :return: 最后将instance对象返回 """ # 从验证后的数据中获取参数 email = validated_data["email"] # 重点:在生成邮箱验证url之前将email保存进数据库中:因为生成url需要从对象中获取url instance.email = email instance.save() # 生成当前用户专有的验证链接:使用isdangerous根据user对象生成token # 每个用户都有可能验证邮箱,直接在模型类中定义generate_verify_email_url方法 url = instance.generate_verify_email_url() # 发送激活验证邮件 send_active_email.delay(email, url) return instance
def update(self, instance, validated_data): ''' :param instance: 视图传过来的 user 用户 :param validated_data: 校验完后的数据 :return: ''' email = validated_data['email'] # 生成激活链接 url = instance.generate_verify_email_url() # 保存数据 instance.email = email instance.save() # 发送邮件 send_active_email.delay(email, url) return instance
def put(self, request): # !!!必须是登陆用户才可以访问!!! # ① 接收 axios body = request.body body_str = body.decode() data = json.loads(body_str) # ② 验证 email = data.get('email') if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): return JsonResponse({ 'code': RETCODE.PARAMERR, 'errmsg': '邮箱不符合规则' }) # ③ 更新数据 request.user.email = email request.user.save() # ④ 给邮箱发送激活连接 # from django.core.mail import send_mail # # #subject, message, from_email, recipient_list, # #subject 主题 # subject='美多商场激活邮件' # #message, 内容 # message='' # #from_email, 谁发的 # from_email = '欢乐玩家<*****@*****.**>' # #recipient_list, 收件人列表 # recipient_list = ['*****@*****.**'] # # html_mesage="<a href='http://www.huyouni.com'>戳我有惊喜</a>" # # send_mail(subject=subject, # message=message, # from_email=from_email, # recipient_list=recipient_list, # html_message=html_mesage) send_active_email.delay(request.user.id, email) # ⑤ 返回相应 return JsonResponse({'code': RETCODE.OK, 'errmsg': 'ok'})
def put(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 JsonResponse({{ 'code': RETCODE.PARAMERR, 'errmsg': '邮箱不符合规则' }}) request.user.email = email request.user.save() # from django.core.mail import send_mail # # #subject, message, from_email, recipient_list, # #subject 主题 # subject='美多商场激活邮件' # #message, 内容 # message='' # #from_email, 谁发的 # from_email = '欢乐玩家<*****@*****.**>' # #recipient_list, 收件人列表 # recipient_list = ['*****@*****.**'] # # html_mesage="<a href='http://www.huyouni.com'>戳我有惊喜</a>" # # send_mail(subject=subject, # message=message, # from_email=from_email, # recipient_list=recipient_list, # html_message=html_mesage) from celery_tasks.email.tasks import send_active_email send_active_email.delay(request.user.id, email) print(email) # ⑤ 返回相应 return JsonResponse({'code': RETCODE.OK, 'errmsg': 'ok'})