Source code for cms_qe_auth.views
from typing import TypeVar
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import login
from django.http import HttpRequest
from django.shortcuts import redirect
from django.template.response import TemplateResponse
from django.utils.translation import gettext as _
from cms_qe.utils import get_base_url
from cms_qe_auth.utils import get_user_by_uidb64
from .forms import RegisterForm
RF = TypeVar('RF', bound=RegisterForm)
[docs]def register(
request: HttpRequest,
template_name: str = 'cms_qe/auth/register.html',
register_form: type[RF] = RegisterForm,
):
"""
Displays the register form and handles the register action.
"""
if request.method == 'POST':
form = register_form(data=request.POST)
if form.is_valid(): # pylint: disable=R1705
base_url = get_base_url(request)
user = form.save(commit=False)
user.is_active = False
user.save(base_url=base_url)
messages.success(request, _('You were successfully registered. Please confirm your email address.'))
return redirect('register')
messages.error(request, _('Please correct errors below.'))
else:
form = register_form()
context = {'form': form}
return TemplateResponse(request, template_name, context)
def activate(
request: HttpRequest,
uidb64: str,
token: str,
template_name_complete: str = 'cms_qe/auth/email_confirmation_complete.html',
template_name_fail: str = 'cms_qe/auth/email_confirmation_fail.html',
):
user = get_user_by_uidb64(uidb64)
if user and user.activate(token):
# Use default django authentication backend if multiple authentication backends are configured
# It doesn't work with custom authentication backends. If you use custom auth backend you should completely
# rewrite authentication and activation.
if len(settings.AUTHENTICATION_BACKENDS) > 1:
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)
return TemplateResponse(request, template_name_complete)
return TemplateResponse(request, template_name_fail)