Files
santeh-ray/users/services.py
Azimkin 80164b833b
All checks were successful
Build and Push Docker Image / build (push) Successful in 46s
feat: implement user authentication features (registration, activation, and password reset)
- Added email templates for activation and password reset (`activation_email.html`, `password_reset_email.html`, etc.)
- Created forms for registration (`RegisterForm`) and login (`LoginForm`) with custom validation
- Developed new pages for account activation (`activation_success.html`, `activation_invalid.html`), password reset workflow, and profile
- Configured email backend and environment file handling in settings
- Updated header template to conditionally display profile or login links based on authentication status
- Enhanced CSS styles for authentication-related pages and forms
2026-04-15 18:27:23 +02:00

34 lines
1.2 KiB
Python

from django.conf import settings
from django.contrib.auth.tokens import default_token_generator
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.urls import reverse
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode
def send_activation_email(request, user):
uid = urlsafe_base64_encode(force_bytes(user.pk))
token = default_token_generator.make_token(user)
activation_path = reverse("users:activate", kwargs={"uidb64": uid, "token": token})
activation_url = request.build_absolute_uri(activation_path)
context = {
"user": user,
"activation_url": activation_url,
"site_name": getattr(settings, "SITE_NAME", "SantehRay"),
}
subject = render_to_string("users/emails/activation_subject.txt", context).strip()
text_body = render_to_string("users/emails/activation_email.txt", context)
html_body = render_to_string("users/emails/activation_email.html", context)
email = EmailMultiAlternatives(
subject=subject,
body=text_body,
from_email=settings.DEFAULT_FROM_EMAIL,
to=[user.email],
)
email.attach_alternative(html_body, "text/html")
email.send()