gpt4 book ai didi

python - python/django 中的电子邮件白名单/黑名单

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:19 26 4
gpt4 key购买 nike

我正在编写一个 Django 应用程序,用于跟踪允许哪些电子邮件地址将内容发布到用户帐户。用户可以根据需要将地址列入白名单和黑名单。

任何未指定的地址都可以按消息处理或仅默认为白名单或黑名单(同样由用户指定)。

这是我写的 django 模型...你认为这样做的好方法吗?或者我应该向每个用户的配置文件模型添加白名单和黑名单字段?

class knownEmail(models.Model):
# The user who set this address' permission, NOT
# the user who the address belongs to...
relatedUser = models.ManyToManyField(User)
email = models.EmailField()

class whiteList(knownEmail):
pass

class blackList(knownEmail):
pass

然后我可以做类似的事情:

def checkPermission(user, emailAddress):
"Check if 'emailAddress' is allowed to post content to 'user's profile"
if whiteList.objects.filter(relatedUser=user, email=emailAddress):
return True
elif blackList.objects.filter(relatedUser=user, email=emailAddress):
return False
else:
return None

有没有更好的办法?

最佳答案

我会重组它,使两个列表都包含在一个模型中。

class PermissionList(models.Model):
setter = models.ManyToManyField(User)
email = models.EmailField(unique=True) #don't want conflicting results
permission = models.BooleanField()

然后,您的列表将是:

# whitelist
PermissionList.objects.filter(permission=True)
# blacklist
PermissionList.objects.filter(permission=False)

要检查特定用户,您只需向模型添加几个函数:

class PermissionList(...):
...
@classmethod
def is_on_whitelist(email):
return PermissionList.objects.filter(email=email, permission=True).count() > 0

@classmethod
def is_on_blacklist(email):
return PermissionList.objects.filter(email=email, permission=False).count() > 0

@classmethod
def has_permission(email):
if PermissionList.is_on_whitelist(email):
return True
if PermissionList.is_on_blacklist(email):
return False
return None

将所有内容集中在一个地方要简单得多,您可以用更少的工作进行更有趣的查询。

关于python - python/django 中的电子邮件白名单/黑名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/744308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com