我正在研究的Django网站有可能让用户注册一个帐户.为了向他们提供一些编辑功能,我使用内置的Django管理员.但是,我遇到了一个问题:用户注册后,他们在Django管理员中没有任何权限,甚至没有查看权限.因此,我的问题是:我如何在代码中为相关模型的用户分配管理员权限,就像我在管理员中编辑用户时在"用户权限"部分中手动分配它们一样?我已经试图与平常 has_xxx_permissions()使用自定义ModelAdmin类,但没有奏效.所以我的猜测是我忽略了一些显而易见的事情.有任何想法吗?
我想将单元测试引入Django应用程序.虽然我开始失败的第一件事我想测试.你能告诉我我做错了什么吗?
我要测试的视图
@user_passes_test(lambda u: u.has_module_perms('myModule'))
def myView(request):
...someCode...
Run Code Online (Sandbox Code Playgroud)
我想测试user_passes_test位,我也有更复杂的测试,所以我想知道我的测试是否允许正确的用户,只有他们访问视图.我专注于那些不起作用的位并简化了一点.
from django.contrib.auth.models import User
from django.test import TestCase
from settings import DJANGO_ROOT
class PermissionsTestCase(TestCase):
fixtures = [DJANGO_ROOT + 'testdata.json']
def setUp(self):
self.user = User.objects.create(username='user', password='pass')
self.user.save()
def test_permissions_overview(self):
url = '/secret/'
#User not logged in (guest)
response = self.client.get(url)
self.assertRedirects(response, 'http://testserver/accounts/login/?next=/secret/')
#Logged in user that should not be able to see this page
response = self.client.get(url)
self.client.login(username='user', password='pass')
self.assertRedirects(response, 'http://testserver/accounts/login/?next=/secret/')
#Logged in user that has 'myModule' module permissions
self.user.user_permissions.add('myModule.view_myThing')
self.user.save()
self.assertTrue(self.user.has_module_perms('myModule')) …Run Code Online (Sandbox Code Playgroud) 向组添加权限时,我使用:
managers.permissions.add(
Permission.objects.get(codename='add_user')
)
Run Code Online (Sandbox Code Playgroud)
使用代号 add_user
现在,在检查用户是否具有特定权限时,我使用users.add_userie。在app_name前置
self.assertTrue(self.user.has_perm('users.add_user'))
Run Code Online (Sandbox Code Playgroud)
这是为什么。是否可以get通过users.add_user.
当我尝试时,我得到:
django.contrib.auth.models.DoesNotExist: Permission matching query does not exist.
Run Code Online (Sandbox Code Playgroud)