首页 > 解决方案 > 密码更改所需的 Django 2.0 测试登录失败并出现语法错误

问题描述

我正在完成来自 Vitor Freitas的教程https://simpleisbetterthancomplex.com/series/beginners-guide/1.11/ 。

我正在使用 Django 2.0.7 来完成这项任务。我知道本教程是为 1.11 编写的,并且我一直在解决在此过程中出现的任何挑战。目前,由于此错误,我遇到了一项无法运行的测试的问题

====================================================================== ERROR: accounts.tests.test_view_password_change

(unittest.loader._FailedTest) ------------------------------------------- --------------------------- ImportError:导入测试模块失败:accounts.tests.test_view_password_change Traceback(最近一次调用):文件“ /usr/lib/python3.5/unittest/loader.py”,第 428 行,在 _find_test_path 模块 = self._get_module_from_name(name) 文件“/usr/lib/python3.5/unittest/loader.py”,第 369 行,在 _get_module_from_name 导入(名称)文件“/home/lance/dev/proj/accounts/tests/test_view_password_change.py”,第 44 行 self.assertRedirects(response, f'{login_url}?next={url}')

测试代码是这样的问题

class PasswordChangeTests(TestCase):
    def setUp(self):
        username = 'john'
        password = 'secret123'
        user = User.objects.create_user(username=username, email='john@doe.com', password=password)
        url = reverse('password_change')
        self.client.login(username=username, password=password)
        self.response = self.client.get(url)


class LoginRequiredPasswordChangeTests(TestCase):
    def test_redirection(self):
        url = reverse('password_change')
        login_url = reverse('login')
        response = self.client.get(url)
        self.assertRedirects(response, f'{login_url}?next={url}')

无效的语法似乎来自最后一行

self.assertRedirects(response, f'{login_url}?next={url}')

有人可以帮我解释为什么这是无效的吗?据我了解,测试正在寻找单引号中列出的模式,并且我已经测试过它在那里。

我不明白为什么单引号不正确。

标签: pythondjango

解决方案


自从F string literals实施Python 3.6以来。因此,请确保您使用的是Python 3.6+.

您也可以使用str.format()方法,
self.assertRedirects(response, '{}?next={}'.format(login_url, url))


推荐阅读