我是 Django 的新手。我一直在尝试使用自定义用户模型设置django-rules,但在尝试访问页面时不断收到 404。这是设置的外观:
自定义用户模型
class User(AbstractBaseUser, PermissionsMixin):
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
is_active = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
设置.py
AUTHENTICATION_BACKENDS = (
'rules.permissions.ObjectPermissionBackend',
'django.contrib.auth.backends.ModelBackend',
)
已安装的应用程序
INSTALLED_APPS = [
# ...
'rules.apps.AutodiscoverRulesConfig',
]
规则.py
@rules.predicate
def is_organisation_member(user, organisation):
"""Check if user is an active organisation member"""
m = get_if_exists(
OrganisationMember,
user=user,
organisation=organisation,
organisation__state=Organisation.LifecycleState.ACTIVE
)
if not m:
return False
if not m.is_active:
return False
return True
rules.add_perm('organisations.member', (is_authenticated & is_active & is_organisation_member))
视图.py
def get_organisation_by_slug(request, *args, **kwargs):
return get_object_or_404(Organisation, workspace_name=kwargs['workspace'])
@permission_required('organisations.member', fn=get_organisation_by_slug)
def OrganisationView(request, workspace):
# ...
网址.py
urlpatterns = [
path('admin/', admin.site.urls),
# ...
# organisation
path('<str:workspace>', v.OrganisationView, name="organisation-show"),
# ...
]
根据调试,is_organisation_member
返回True,但用户在尝试查看页面时仍然收到 404 错误(没有 django-rulespermission_required
装饰器,页面可以正常工作)。任何想法为什么我会收到 404 响应?