Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django如何在客户端测试中设置请求用户_Python_Django_Testing - Fatal编程技术网

Python django如何在客户端测试中设置请求用户

Python django如何在客户端测试中设置请求用户,python,django,testing,Python,Django,Testing,我正在测试一个视图,我的测试如下所示: def test_profile(self, user_id): user = User.objects.create_user(username="myusername", password="password", email="abc@testmail.com") self.client.user = user print(user.id) request = self.client.get("/account/pr

我正在测试一个视图,我的测试如下所示:

def test_profile(self, user_id):
    user = User.objects.create_user(username="myusername", password="password", email="abc@testmail.com")
    self.client.user = user

    print(user.id)

    request = self.client.get("/account/profile/{}/".format(user_id), follow=True)
    self.assertEqual(request.status_code, 200)

这里我的个人资料视图有
login\u必需的
decorator。因此,我如何将user设置为request.user

我自己也在尝试这样做,但发现Django Test Client没有在请求中设置user,并且在以任何其他方式使用客户端时无法设置request.user。我过去常常这样

def setUp(self):
    self.request_factory = RequestFactory()
    self.user = User.objects.create_user(
        username='javed', email='javed@javed.com', password='my_secret')

def test_my_test_method(self):
    request = self.request_factory.post(reverse('home'), {'question_title_name':'my first question title', 'question_name':'my first question', 'question_tag_name':'first, question'})
    request.user = self.user
    response = home_page(request)
有关请求工厂的详细信息请尝试以下操作:

from django.test import TestCase, Client

from django.contrib.auth.models import User

class YourTestCase(TestCase):
    def test_profile(self, user_id):
        user = User.objects.create(username='testuser')
        user.set_password('12345')
        user.save()
        client = Client()
        client.login(username='testuser', password='12345')
        response = client.get("/account/profile/{}/".format(user.id), follow=True)
        self.assertEqual(response.status_code, 200)
在这里,我首先创建用户并为用户设置登录凭据。然后我创建一个客户机并使用该用户登录。因此,在您的views.py中,当您执行request.user时,您将获得此用户。

此功能:

self.client.force_authenticate(user=user)

如果有响应,可以访问
response.context['user']


如果您需要响应对象,只需调用任何将创建上下文的视图,例如,
response=self.client.get(“/”)

请添加一个小说明,以帮助其他用户。@thomassymy已按您的建议添加。希望足够清楚。我认为
request
应该是
response
这里。可能方法名称在某个时候更改了,我正在使用force\u登录