def verify_email_for_object(self, email, content_object, email_field_name='email'): """ Create an email confirmation for `content_object` and send a confirmation mail. The email will be directly saved to `content_object.email_field_name` when `is_primary` and `skip_verify` both are true. """ confirmation_key = generate_random_token() try: confirmation = EmailConfirmation() confirmation.content_object = content_object confirmation.email_field_name = email_field_name confirmation.email = email confirmation.confirmation_key = confirmation_key confirmation.save() except IntegrityError: confirmation = EmailConfirmation.objects.get_for_object( content_object, email_field_name) confirmation.email = email confirmation.confirmation_key = confirmation_key confirmation.save(update_fields=['email', 'confirmation_key']) confirmation.send() return confirmation
def set_email_for_object(self, email, content_object, email_field_name='email', is_primary=True, skip_verify=False, template_context=None): """ 只有 `is_primary=True` 時,email 才會被 save 到 content_object 的 email_field_name 欄位 """ content_type = ContentType.objects.get_for_model(content_object) try: confirmation = EmailConfirmation.objects.get( content_type=content_type, object_id=content_object.id, email_field_name=email_field_name, email=email, ) except EmailConfirmation.DoesNotExist: confirmation = EmailConfirmation() confirmation.content_object = content_object confirmation.email_field_name = email_field_name confirmation.email = email confirmation.confirmation_key = utils.generate_random_token([str(content_type.id), str(content_object.id), email, ]) confirmation.save() if not skip_verify: confirmation.send(template_context) if is_primary: confirmation = confirmation.set_primary() if skip_verify: confirmation.is_verified = True update_fields(confirmation, fields=('is_verified', )) if confirmation.is_verified and confirmation.is_primary and settings.EMAIL_CONFIRM_LA_SAVE_EMAIL_TO_INSTANCE: confirmation.save_email() return confirmation
def set_email_for_object(self, email, content_object, email_field_name='email', is_primary=True, skip_verify=False, template_context=None): """ Add an email for `content_object` and send a confirmation mail by default. The email will be directly saved to `content_object.email_field_name` when `is_primary` and `skip_verify` both are true. """ content_type = ContentType.objects.get_for_model(content_object) try: confirmation = EmailConfirmation.objects.get( content_type=content_type, object_id=content_object.id, email_field_name=email_field_name, email=email, ) except EmailConfirmation.DoesNotExist: confirmation = EmailConfirmation() confirmation.content_object = content_object confirmation.email_field_name = email_field_name confirmation.email = email confirmation.confirmation_key = utils.generate_random_token([str(content_type.id), str(content_object.id), email, ]) confirmation.save() if not skip_verify: confirmation.send(template_context) if is_primary: confirmation = confirmation.set_primary() if skip_verify: confirmation.is_verified = True update_fields(confirmation, fields=('is_verified', )) # TODO: may remove EMAIL_CONFIRM_LA_SAVE_EMAIL_TO_INSTANCE if confirmation.is_verified and confirmation.is_primary and settings.EMAIL_CONFIRM_LA_SAVE_EMAIL_TO_INSTANCE: confirmation.save_email() return confirmation