#django #django-rest-framework
#django #django-rest-framework
Вопрос:
Является ли электронная почта автоматически обязательной при использовании Django?
Я пытаюсь создать API, в котором требуется электронная почта или телефон.
Это серверная часть, которую я создал
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
from accounts.models import User
class UserBackend(ModelBackend):
def authenticate(self, request, **kwargs):
email = kwargs['username']
phone_number = kwargs['username']
password = kwargs['password']
try:
app_user = User.objects.get(email=email)
if app_user.check_password(password) is True :
return app_user
except User.DoesNotExist:
app_user = User.objects.get(phone_number=phone_number)
if app_user .check_password(password) is True :
return app_user
except User.DoesNotExist:
pass
Похоже, не удается избавиться от электронной почты
Ответ №1:
def validate(self, attrs):
phone_number_ = attrs.get('phone_number', '')
email_ = attrs.get('email', '') # get - Provide defualt param is email not inserted
username_ = attrs.get('username', '')
if phone_number_ == '' and email_== '':
raise serializers.ValidationError('Enter email or phone')
elif User.objects.filter(email=email_).exists():
if email_ != '':
raise serializers.ValidationError(
{'email',('Email is already in use')})
elif User.objects.filter(phone_number=phone_number_).exists():
if phone_number_ != '':
raise serializers.ValidationError(
{'phone_number',('Phone Number is already in use')})
elif User.objects.filter(username=username_).exists():
raise serializers.ValidationError(
{'username',('Username is already in use')})
return super().validate(attrs)
Добавил это в мой сериализатор. Я не очень хороший программист, но все изменения, которые я внес, имели для меня смысл. Похоже, он также работает отлично, будет обновляться, если я обнаружу ошибки.
Номер телефона не обязательно должен быть уникальным не знаю почему?