def login(request): # 之后添加功能:如果用户已经登录,重定向 if request.method == 'POST': form = LoginForm(request.POST) if form.is_valid(): data = form.clean() username = data['username'] if '@' in username: # 邮箱也可以登录 email = username else: user = MyUser.objects.get(username=username) email = user.email user = authenticate(email=email, password=data['password']) if user is not None: auth_login(request, user) # 这里还可以更进一步的写,这里先简单的重定向 return redirect('/') # 登录成功,跳转回首页 else: messages.error(request, '密码不正确!') return render(request, 'users/login.html', context={'form': form}) # use an explicit context_dictionary, instead of passing locals() else: form = LoginForm() return render(request, 'users/login.html', {'form': form})
def test_login_form_clean_is_valid_sucess(self): """Users appliation login form clean method success test Check LoginForm's clean method return exist user data """ user = {"email": "*****@*****.**", "password": "******"} form = LoginForm(user) if form.is_valid(): self.assertEqual(user, form.clean())
def test_login_form_clean_method(): # form should no be valid because user does not exist creds = {"username": "******", "password": "******"} form = LoginForm(data=creds) assert not form.is_valid() # user and request setup user = UserModel.objects.create_user( username="******", password="******", email="*****@*****.**" ) request = RequestFactory() request.user = user form = LoginForm(request=request, data=creds) # form should be valid because user exist in DB assert form.is_valid() # form.clean should return cleaned data as a dict assert form.clean() == creds # calling form.get_user should return authenticated user assert form.get_user() == user