如何使用自定义权限和APIView实现基于许可证的用户访问?
How to implement a user access based on licenses using custom permissions and APIView?
我有以下型号。
class Post(models.Model):
content = models.TextField()
class User(AbstractUser):
pen_name = models.Charfield()
我想限制用户创建特定数量的帖子(比如说 10 个)并且不能超过这个数量。另外,我希望权限在特定日期前过期。
这些模型具有代表性,我原来的模型有更多的字段,需要更多的权限。但对于所有这些,我基本上都需要限制数量和有效期。我想通过使用权限来获得许可功能。因此,用户可以购买许可证在一年内发布 'n' 个帖子。
对于 APIViews 和 DRF 中的 permission_classes,我该如何实现?
您可以为您的自定义添加一个字段(post_number
) User
,这个字段可以是 IntegerField
或 PositiveIntegerField
,您可以将其设为 limited.
How to create an expiration date in my django model?
class User(AbstractBaseUser, PermissionsMixin):
post_number = models.IntegerField()
expiration_date = models.DateTimeField()
more_restrictions = models.ManyToManyField(MyRestrictionModel)
# rest of your code...
有关更多限制,您可以与 MyRestrictionModel
建立关系,每当您向 MyRestrictionModel
添加字段时,您的 User
将受到限制。
对于许可证,您可以创建许可证模型
class License(models.Model):
code = models.Charfield()
count = models.Integerfield()
#other fields for license information
然后您可以将 ManyToManyField 中的许可证授予用户模型
class User(models.Model):
...
licenses = models.ManyToManyField(License)
...
您还可以为 M2M 关系添加直通模型,以存储其他详细信息,例如许可证购买日期、到期日期、交易记录等。
然后在APIViews中可以使用DRF的自定义权限class
class MyPermissionClass(permissions.BasePermission):
def has_permission(self, request, view):
#process user's licenses to check permissions
class MyView(APIView):
permission_classes = [MyPermissionClass,]
我有以下型号。
class Post(models.Model):
content = models.TextField()
class User(AbstractUser):
pen_name = models.Charfield()
我想限制用户创建特定数量的帖子(比如说 10 个)并且不能超过这个数量。另外,我希望权限在特定日期前过期。
这些模型具有代表性,我原来的模型有更多的字段,需要更多的权限。但对于所有这些,我基本上都需要限制数量和有效期。我想通过使用权限来获得许可功能。因此,用户可以购买许可证在一年内发布 'n' 个帖子。
对于 APIViews 和 DRF 中的 permission_classes,我该如何实现?
您可以为您的自定义添加一个字段(post_number
) User
,这个字段可以是 IntegerField
或 PositiveIntegerField
,您可以将其设为 limited.
How to create an expiration date in my django model?
class User(AbstractBaseUser, PermissionsMixin):
post_number = models.IntegerField()
expiration_date = models.DateTimeField()
more_restrictions = models.ManyToManyField(MyRestrictionModel)
# rest of your code...
有关更多限制,您可以与 MyRestrictionModel
建立关系,每当您向 MyRestrictionModel
添加字段时,您的 User
将受到限制。
对于许可证,您可以创建许可证模型
class License(models.Model):
code = models.Charfield()
count = models.Integerfield()
#other fields for license information
然后您可以将 ManyToManyField 中的许可证授予用户模型
class User(models.Model):
...
licenses = models.ManyToManyField(License)
...
您还可以为 M2M 关系添加直通模型,以存储其他详细信息,例如许可证购买日期、到期日期、交易记录等。
然后在APIViews中可以使用DRF的自定义权限class
class MyPermissionClass(permissions.BasePermission):
def has_permission(self, request, view):
#process user's licenses to check permissions
class MyView(APIView):
permission_classes = [MyPermissionClass,]