Integration

Django REST Regristration

The django-rest-registration is not really flexible in term of template engine for emails.

There are however workarounds.

Registration view

The registration view can use emailhub template if you disable REGISTER_VERIFICATION_ENABLED and use signal to send the notification instead:

# settings.py
REST_REGISTRATION = {
  'REGISTER_VERIFICATION_ENABLED': False,
}
# signals.py
from django.conf import settings
from django.dispatch import receiver

from rest_registration.api.views.register import RegisterSigner
from rest_registration.utils.users import get_user_verification_id
from emailhub.utils.email import EmailFromTemplate

@receiver(user_registered, sender=None)
def user_registred(sender, **kwargs):
    user, request = kwargs.get('user'), kwargs.get('request')
    with transaction.atomic():
        signer = RegisterSigner({
            'user_id': get_user_verification_id(user),
        }, request=request)
        context = {
            'site': settings.FRONTEND_URL.split('//').pop(-1),
            'site_url': settings.FRONTEND_URL,
            'params_signer': signer,
            'verification_url': settings.REST_REGISTRATION.get(
                'REGISTER_VERIFICATION_URL'),
        }
        EmailFromTemplate(
            'register-verify', extra_context=context,
            lang=user.language).send_to(user)
# views.py
from django.conf import settings

from rest_registration.decorators import api_view_serializer_class_getter
from rest_registration.settings import registration_settings
from rest_registration.notifications.enums import NotificationType
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_registration.utils.responses import get_ok_response
from rest_registration.utils.users import get_user_verification_id
from rest_registration.exceptions import UserNotFound
from rest_registration.api.views.reset_password import ResetPasswordSigner
from emailhub.utils.email import EmailFromTemplate


@api_view_serializer_class_getter(
    lambda: registration_settings.SEND_RESET_PASSWORD_LINK_SERIALIZER_CLASS)
@api_view(['POST'])
@permission_classes([AllowAny])
def send_reset_password_link(request):
    '''
    Send email with reset password link.
    '''
    if not registration_settings.RESET_PASSWORD_VERIFICATION_ENABLED:
        raise Http404()
    serializer_class = registration_settings.SEND_RESET_PASSWORD_LINK_SERIALIZER_CLASS  # noqa: E501
    serializer = serializer_class(
        data=request.data,
        context={'request': request},
    )
    serializer.is_valid(raise_exception=True)
    user = serializer.get_user_or_none()
    if not user:
        raise UserNotFound()
    signer = ResetPasswordSigner({
        'user_id': get_user_verification_id(user),
    }, request=request)

    EmailFromTemplate(
        'password-reset', extra_context={
            'site': settings.FRONTEND_URL.split('//').pop(-1),
            'site_url': settings.FRONTEND_URL,
            'params_signer': signer,
            'verification_url': signer.get_url(),
            'user': user,
        }, lang=user.language).send_to(user)

    return get_ok_response('Reset link sent')