python - 在 django (pytest) 中使用权限测试登录保护页面
问题描述
我正在尝试测试到目前为止仅显示模板的视图。要访问视图,用户需要权限'projects.can_view'
。
我正在尝试使用夹具在测试数据库中创建具有此权限的用户,然后尝试使用数据库中用户的用户名和密码登录客户端。我尝试访问该视图,但出现 302 错误(重定向到登录视图。)我可以验证我实际上是否正确传递了权限:
我的夹具:
@pytest.fixture()
def create_users_with_permissions():
User = get_user_model()
u = User.objects.create(
username="test",
password="pass",
)
permission = Permission.objects.get(name='Can view project')
u.user_permissions.add(permission)
u = User.objects.get(username='test')
print(u.has_perm('appname.view_project'))
return u
我再次查询用户以删除权限缓存,如文档中所述(https://docs.djangoproject.com/en/3.0/topics/auth/default/)。当我打印出来print(u.has_perm('appname.view_project'))
它返回True
。因此,我假设我创建了一个具有此特定权限的用户。
现在我将fixture传递给我的测试并将pytests client-fixture记录在:
def test_xyz(
self, client, create_users_with_permissions
):
client.login(
username=create_users_with_permissions.username,
password=create_users_with_permissions.password
)
url = reverse('urlforview')
response = client.get(url)
assert response.status_code == 200
这失败并显示错误代码:assert 302 == 200
如果我在数据库中创建一个超级用户并使用相应的用户登录它就可以工作。当我硬编码用户名和密码时,它也失败了。我在这里想念什么?
感谢您的每一个帮助或建议,非常感谢!
我的观点只有这个:
class ProjectCustomerList(PermissionRequiredMixin, TemplateView):
template_name = 'mytemplate.html'
permission_required = 'projects.can_view'
解决方案
推荐阅读
- docker - docker-jenkins 容器无法访问互联网
- python - 将存储过程结果存储在数据框中时,MySql 命令不同步
- reactjs - 如何使用 React Native (Expo) 将文件/图像上传到 Azure Blob?
- perl - 如何在 nginx mod_perl 中获取 http_referer
- php - 如何将上次修改日期添加到我的 WooCommerce 产品
- sql - 为缺少的聚合创建空/默认行的最佳方法是什么
- java - 如何将密码添加到 base 64 pdf?
- sql-server - 我可以通过 SQL Server Management 和 SQL Profiler 连接到我的 SQL Server 实例,但我的 VS 应用程序无法连接
- mysql - 如何将 .so 文件发送到 Google Cloud 上的 MySQL 实例?
- php - 使用 Doctrine-Fixture 加载数据时,requestStack getCurrentRequest 在服务中为空