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: Я предполагаю, что у вас уже есть пользовательская модель аутентификации для регистрации пользователей с помощью электронной почты