我正在尝试使用其内置的登录功能登录测试客户端。我正在尝试单元测试视图,需要登录才能测试其中的一些。我一直试图这么做并需要帮助。 几点说明:
create_user()确实创建了一个有效的用户,它已在其他位置使用过。
从我所看到的client.login()返回一个布尔值,当我运行我的测试时,失败是“False is not True”,所以这似乎是正确的。
我成功登录的唯一方法是调用client.post(“/ my / login / url”,{dict中的用户名和密码。}) 但是,出于某种原因它并没有为我的所有测试用例保持登录状态,我觉得很奇怪。
def setUp(self):
"""
Initializes the test client and logs it in.
"""
self.user = create_user()
self.logged_in = self.client.login(username=self.user.username, password=self.user.password)
def test_valid(self):
self.assertTrue(self.logged_in)
我已将其更改为以下内容:
def setUp(self):
"""
Initializes the test client and logs it in.
"""
self.password = "password"
self.user = create_user(password=self.password)
self.logged_in = self.client.login(username=self.user.username, password=self.password)
仍然无法登录。
create user在类“Static”中并且user_count初始化为0,功能如下:
def create_user(username=None, password=None, email=None, is_superuser=False):
if username is None:
username = "user%d" % Static.user_count
while User.objects.filter(username=username).count() != 0:
Static.user_count += 1
username = "user%d" % Static.user_count
if password is None:
password = "password"
if email is None:
email="user%d@test.com" % Static.user_count
Static.user_count += 1
user = User.objects.create(username=username, password=password, is_superuser=is_superuser)
答案 0 :(得分:21)
您无法直接访问密码。 password
属性已加密。 (见Password management in Django。)
例如,这里输出密码的示例。
>>> user = User.objects.create_user(username='asdf', email='asdf@example.com', password='xxxx')
>>> user.password
'sha1$166e7$4028738f0c0df0e7ec3cec06843c35d2b5a1aae8'
如您所见,user.password
不是xxxx
我给的。
我修改create_user
以接受可选的密码参数。并将密码传递给create_user
和client.login
,如下所示:
def setUp(self):
"""
Initializes the test client and logs it in.
"""
password = 'secret'
self.user = create_user(password=password)
self.logged_in = self.client.login(username=self.user.username, password=password)
<强>更新强>
create_user
应使用User.objects.create_user
代替User.objects.create
。并且应该返回创建的用户对象:
def create_user(username=None, password=None, email=None, is_superuser=False):
if username is None:
username = "user%d" % Static.user_count
while User.objects.filter(username=username).count() != 0:
Static.user_count += 1
username = "user%d" % Static.user_count
if password is None:
password = "password"
if email is None:
email="user%d@test.com" % Static.user_count
Static.user_count += 1
user = User.objects.create_user(username=username, password=password)
# ^^^^^^^^^^^
user.is_superuser = is_superuser
user.save()
return user # <---