django - Django 测试登录
问题描述
我为创建用户和登录创建了一个测试。在我的设置中,我使用 min_length = 8 定义了密码。但是测试通过了 3 个字符的密码。这是我的设置:
AUTH_PASSWORD_VALIDATORS = [
{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', },
{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 'OPTIONS': {'min_length': 8}},
{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', },
{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', },]
我的测试如下所示:
from django.test import TestCase
from django.contrib.auth import get_user_model
class UsersManagersTests(TestCase):
def test_create_user(self):
custom_user = get_user_model()
user = custom_user.objects.create_user(email='normal@user.com', password='foo')
self.assertEqual(user.email, 'normal@user.com')
self.assertTrue(user.is_active)
self.assertFalse(user.is_staff)
self.assertFalse(user.is_superuser)
try:
# username is None for the AbstractUser option
# username does not exist for the AbstractBaseUser option
self.assertEqual(user.username, '')
# password will be encrypted with bcrypt
self.assertNotEqual(user.password, 'foo')
except AttributeError:
pass
with self.assertRaises(TypeError):
custom_user.objects.create_user()
with self.assertRaises(TypeError):
custom_user.objects.create_user(username='')
with self.assertRaises(TypeError):
custom_user.objects.create_user(username='', password="foo")
def test_create_superuser(self):
custom_user = get_user_model()
admin_user = custom_user.objects.create_superuser(email='super@user.com', password='bla')
self.assertEqual(admin_user.email, 'super@user.com')
self.assertTrue(admin_user.is_active)
self.assertTrue(admin_user.is_staff)
self.assertTrue(admin_user.is_superuser)
try:
# username is None for the AbstractUser option
# username does not exist for the AbstractBaseUser option
self.assertEqual(admin_user.username, '')
except AttributeError:
pass
with self.assertRaises(ValueError):
custom_user.objects.create_superuser(
email='super@user.com', password='bla', is_superuser=False)
def test_login_user(self):
# Create an instance of a POST request.
self.client.login(email="normal@user.com", password="foo")
data = {'username': 'test name'}
res = self.client.post('/accounts/login/', data)
self.assertEqual(res.status_code, 200)
我错过了什么?还是在测试期间没有考虑这些设置?
解决方案
这是预期和记录的行为:
默认情况下,验证器用于重置或更改密码的表单
createsuperuser
以及changepassword
管理命令中。验证器不在模型级别应用,例如在User.objects.create_user()
和中create_superuser()
,因为我们假设开发人员而不是用户在该级别与 Django 进行交互,而且模型验证不会作为创建模型的一部分自动运行。
推荐阅读
- google-apps-script - 使用脚本和 GID 更改 Google 表格选项卡名称
- protocol-buffers - 将 WCF 服务迁移到 gRPC 服务时出错
- reactjs - React-beautiful-dnd 平面数据结构到嵌套
- python - 如果某个值连续出现至少一次,则更改pandas中该行的最后一个值
- python - 在 pandas 中使用半小时增量计算 8 小时大小的滚动窗口
- python - 使数组的所有元素都相同
- android - Flutter Bloc - BlocListener 对状态变化没有反应
- reactjs - 此表达式不可调用。并非所有类型为 'string | ((searchTerm: string) => 承诺
) | []' 是可调用的 - python - 为什么花哨的索引与 numpy 中的切片不同?
- sql - SQL 查询未对临时表中的所有记录执行