Добавим библиотеку проверки.
Серилизаторы.
Вьюха.
Роут.
pip install email-validator
from rest_framework import serializers
class CheckEmailRequestSerializer(serializers.Serializer):
email = serializers.CharField()
class CheckEmailResponseSerializer(serializers.Serializer):
message = serializers.CharField()
status = serializers.IntegerField()
Сгенерируем случайный пароль и отправим на емейл.
Определим бекенд для писем.
Содержимое письма.
...
from django.core.mail import send_mail
from random import randrange
class RegistrationView(APIView):
...
def post(self, request, format=None):
...
password = str(randrange(111,999))
user = UserProfile()
user.username = request.data.get('email')
user.set_password(password)
user.email = request.data.get('email')
user.is_active = True
user.save()
send_mail(
'Регистрация',
'Ваш пароль %s.' % password,
'admin@example.com',
[request.data.get('email')],
fail_silently=False,
)
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = '/home/zdimon/Desktop/projects/ij/tmp/'
Для того, чтобы авторизованный пользователь оставался таковым после обновления страницы нам нужно при каждом создании приложения ангуляр послать запрос на сервер и проверить авторизацию пользователя и если он авторизован получить данные сессии.
Создаем серилизатор для выходных данных запроса backend/account/serializers/init.py.
Для не авторизованного запроса со статусом 401 backend/backend/serializers/noauth.py.
Создаем представление backend/account/views/init.py.
Если пользователь авторизован на фронтенде, у него будет установлен токен в хранилище и он его нам передаст в заголовке.
Поэтому на сервере мы получим пользователя из реквеста request.user.userprofile.
from rest_framework import serializers
from account.serializers.profile import UserProfileSerializer
class InitSerializer(serializers.Serializer):
token = serializers.CharField()
user = UserProfileSerializer()
from rest_framework import serializers
class NoAuthSerializer(serializers.Serializer):
detail = serializers.CharField()
status_code = serializers.IntegerField()
status = serializers.IntegerField()
info = serializers.CharField()