python/django 中的电子邮件白名单/黑名单
我正在编写一个 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
有更好的方法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我会对其进行重组,以便两个列表都包含在一个模型中。
然后,您的列表将是:
要检查特定用户,您只需向模型添加几个函数:
将所有内容放在一个位置会简单得多,并且您可以用更少的工作进行更有趣的查询。
I would restructure it so both lists were contained in one model.
Then, your lists would just be:
To check a particular user, you just add a couple functions to the model:
Having everything in one place is a lot simpler, and you can make more interesting queries with less work.
[请以大写字母开头所有类名。]
您的代码没有很好地利用您的类区别。
具体来说,您的课程没有任何不同的行为。 由于这两个类都具有相同的方法,因此不清楚为什么它们首先是两个不同的类。 如果他们有不同的方法,那么你的解决方案就是好的。
但是,如果他们没有不同的方法,您可能需要考虑提供自定义的 KnownEmail 两个子集的 ="nofollow noreferrer">manager
[Please start All Class Names With Upper Case Letters.]
Your code doesn't make use of your class distinction very well.
Specifically, your classes don't have any different behavior. Since both classes have all the same methods, it isn't clear why these are two different classes in the first place. If they have different methods, then your solution is good.
If, however, they don't have different methods, you might want to look at providing a customized manager for each of the two subsets of
KnownEmail
此类将电子邮件地址与电子邮件域黑名单进行比较。 如果您愿意,可以使用 pip 安装 django-email-blacklist。
This class compares an email address with a blacklist of email domains. If you preffer you can download this module using pip install django-email-blacklist.