Witam. Napisałem widok logowania w django na podstawie własnego modelu backendu. Chciałem, aby zamiast nazwy użytkownika podawać adres e-mail. W praktyce działa, chciałbym teraz napisać test dla funkcji logowania.
Kod testu:
def test_login_form(self):
from .models import User
from django.contrib import auth
username = 'Test'
email = 'test@test.com'
password = 'TestPassword'
business = True
user = User(username=username, email=email, password=password, business=business)
user.save()
login_user = auth.authenticate(username=email, password=password)
self.assertTrue(login_user)
Funkcja auth.authenticate nie zwraca jednak użytkownika. Czy test jest napisany nieprawidłowo?
Celowo nie wrzucam kodu widoku oraz modelu backendu, te działają poprawnie. Gdyby jednak zaszła potrzeba, napiszcie proszę w komentarzu.
Model backendu:
class EmailBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
UserModel = get_user_model()
try:
user = UserModel.objects.get(email=username)
except UserModel.DoesNotExist:
return None
else:
if user.check_password(password):
return user
return None
Widok logowania:
def login(request):
template = loader.get_template('login/index.htm')
if request.method == 'POST':
user = auth.authenticate(username=request.POST['email'],
password=request.POST['password'])
if user is not None:
auth.login(request, user)
return redirect('main_page')
messages.error(request, 'Nieprawidłowy e-mail lub hasło')
return HttpResponse(template.render({}, request))
else:
return HttpResponse(template.render({}, request))