Django, Как войти в систему с помощью имени пользователя и электронной почты

Иногда возникают ошибки в моем коде, я пытаюсь использовать try и expect, но не получается. Я хочу сделать логин с именем пользователя и электронной почтой. Пожалуйста, помогите решить проблему.

View.py

def login_attempt(request):
    if request.method == 'POST' :
       username = request.POST.get('username')
        email    = request.POST.get('username')
        password = request.POST.get('password')
       try: 
              user_obj = User.objects.filter(email = email.lower()).first()    
        except: 
              user_obj = User.objects.filter(username = username.lower()).first()
        try: 
            user = authenticate(username = username.lower(), password = password )
        except:
            user = authenticate(email = email.lower(), password = password 
       login(request, user);
       return render(request, 'login.html',context)

from django.contrib.auth import authenticate, login
def login_view(request, *args, **kwargs):
    user=request.user
    form=LoginForm(request.POST)
    if request.POST:
        if form.is_valid():
            email=request.POST['email']
            password=request.POST['password']
            user=authenticate(email=email, password=password)
            if user:
                login(request, user)
                return redirect('products-home')
    else:
        form=LoginForm() 
    return render(request, 'customUser/login.html',{'form':form})

Если вы хотите зарегистрировать пользователя с помощью электронной почты или имени пользователя. Вам может понадобиться использовать try/except для обработки ошибок. И не забывайте, что существуют более надежные способы определения электронной почты. вот фрагмент:

def login_attempt(request):
    if request.method == 'POST' :
        login_input = request.POST.get('username').lower()
        password = request.POST.get('password')

        """
        alternative: 
             if ".com" in login_input
        """
        if "@" in login_input:
            user_obj = User.objects.filter(email = login_input)).first()
            user = authenticate(email = user_obj.email, password = password )
        else:
            user_obj = User.objects.filter(username = login_input).first()
            user = authenticate(email = user_obj.username, , password = password 
       login(request, user);
       return render(request, 'login.html',context)

NOTE: Я предполагаю, что у вас уже есть пользовательская модель аутентификации для регистрации пользователей с помощью электронной почты

Вернуться на верх