Есть ли в Django способ, при котором суперадмин может создавать обычных пользователей, а пользователи получают письмо с учетными данными, которые были созданы для них?
У меня проблемы с тем, как реализовать сценарий, над которым я работаю. Я новичок в веб-разработке, поэтому прошу простить мою наивность.
Я использую стандартную панель администратора Django, где я вошел в систему с помощью созданного мной супер-администратора. Приложение не имеет вида регистрации, поэтому только администратор сможет создавать новых пользователей. Обычные пользователи получат электронное письмо с их учетными данными. Чтобы они могли войти в систему через LoginAPIView
.
views.py
class LoginView(APIView):
serializer_class = LoginSerializer
def post(self, request):
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
return Response(serializer.data, status=status.HTTP_200_OK)
serializers.py
class LoginSerializer(serializers.ModelSerializer):
email = serializers.EmailField(max_length=255)
password = serializers.CharField(min_length=8, write_only=True)
class Meta:
model = User
fields = ["email", "password"]
def validate(self, attrs):
email = attrs.get("email")
password = attrs.get("password")
user = auth.authenticate(username=email, password=password)
if not user:
raise AuthenticationFailed("Invalid credentials")
if not user.is_active:
raise AuthenticationFailed("Account is not active, please contain admin")
return {"email": user.email}
models.py
class UserManager(BaseUserManager):
def create_user(self, email, password=None, **kwargs):
if not email or not password:
raise ValueError("Users must have both email and password")
email = self.normalize_email(email).lower()
user = self.model(email=email, **kwargs)
user.set_password(password)
user.save()
return user
def create_superuser(self, email, password, **extra_fields):
if not password:
raise ValueError("Password is required")
user = self.create_user(email, password)
user.is_superuser = True
user.is_staff = True
user.save()
return user
class User(AbstractBaseUser, PermissionsMixin):
# user data
email = models.EmailField(max_length=255, unique=True)
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
# status
is_active = models.BooleanField(default=True)
is_verified = models.BooleanField(default=False)
# timestamps
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = UserManager()
USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["first_name", "last_name"]
def __str__(self):
return self.email
admin.py
from django.contrib import admin
from authentication.models import User
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
list_display = ("email", "first_name","last_name")
Как мне реализовать логику, при которой администратор создает пользователя в панели администратора, а пользователь получает учетные данные для входа. У меня также есть SignUpView
ниже на случай, если это понадобится.
views.py
class SignUpView(APIView):
serializer_class = RegisterSerializer
def post(self, request, *args):
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
user_data = serializer.data
return Response(user_data, status=status.HTTP_201_CREATED)
Заранее спасибо!
Вы можете использовать действия администратора, которые отправляют электронные письма с помощью функции send_email, когда создается учетная запись.
Действия администратора - https://docs.djangoproject.com/en/3.2/ref/contrib/admin/actions/
send_email - https://docs.djangoproject.com/en/4.1/topics/email/