我正在尝试使用其内置的登录功能登录测试客户端。我正在尝试对测试视图进行单元测试,并且需要登录以测试其中的一些视图。我已经尝试这样做太长时间了,需要帮助。一些注意事项:
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)
它仍然无法登录。
创建用户位于“静态”类中,并且将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%[email protected]" % Static.user_count
Static.user_count += 1
user = User.objects.create(username=username, password=password, is_superuser=is_superuser)
您不能直接访问密码。该password
属性已加密。(请参阅Django中的密码管理。)
例如,此处是密码输出示例。
>>> user = User.objects.create_user(username='asdf', email='[email protected]', password='xxxx')
>>> user.password
'sha1$166e7$4028738f0c0df0e7ec3cec06843c35d2b5a1aae8'
如您所见,user.password
不是xxxx
我给的。
我将修改create_user
为接受可选的password参数。并将密码同时传递给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%[email protected]" % 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 # <---
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句