首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >django -获取登录到测试客户端的用户

django -获取登录到测试客户端的用户
EN

Stack Overflow用户
提问于 2012-02-18 01:10:17
回答 4查看 20.1K关注 0票数 32

在django测试中,如何获取当前登录的用户?

例如,这是我想要编写的测试:

代码语言:javascript
复制
def test_author_set_once(self):
    self.client.login(username='Adam', password='password')
    #create an object and test the author is adam
    self.client.login(username='Barry', password='password')
    #modify the first object and test that the author has not changed

所以我想说一些像这样的话。

代码语言:javascript
复制
self.assertEqual(object.author, self.client.user)

(但我不能)

我目前的编码方式如下:

代码语言:javascript
复制
self.client.login(username='Adam', password='password')
self.user = User.objects.get(username='Adam')
#create an object 
self.assertEqual(object.author, self.user)

这依赖于request.user与特定用户对象相同的假设。我想它还可以,但它看起来有点笨拙。

有什么办法可以避免这种假设吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-18 01:34:11

测试客户端是请求不可知的。它本身并不保存有关登录用户的信息。(由于显而易见的原因,您的实际dev服务器或Django开发服务器也不是这样的,同样的原因也适用于这里)。

login只是测试客户机上的一种方便的方法,它本质上是用定义的用户凭据模拟到/login/的POST。没别的了。

实际用户可以在request上使用,就像在视图中一样。但是,因为您不能直接访问视图,所以Django在视图的响应中提供了request。在您实际使用测试客户端加载视图之后,您可以存储结果,然后通过以下方式获取用户:

代码语言:javascript
复制
response.request.user

更新版本的Django将使用:

代码语言:javascript
复制
response.wsgi_request.user
票数 45
EN

Stack Overflow用户

发布于 2012-11-02 04:18:59

实际上,您不能通过测试客户端响应访问当前用户。

但是,您可以检查是否有用户已登录。检查self.client.session将完成以下工作:

代码语言:javascript
复制
self.client.session['_auth_user_id']
>>> 1

有一个用于此的more detailed answer

票数 39
EN

Stack Overflow用户

发布于 2017-04-07 15:00:17

我不知道您使用的是哪个版本。从1.10.2开始,response中有一个wsgi_request属性,它在您的视图中作为request对象。

因此,让用户登录非常简单:

代码语言:javascript
复制
response.wsgi_request.user
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9332541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档