在Django中,我需要创建一个自定义的密码验证器,它需要从数据库中读取密码策略配置。要做到这一点,我需要客户端ID,这通常是嵌入在请求变量,但在这种情况下,请求它不可用。是否有其他方法可以实现这一点?
class MinimumLengthValidator:
"""
Validate whether the password is of a minimum length.
"""
def __init__(self, min_length=8):
self.min_length = min_length
#get minimum length from client config here, typically request.client.config.password_min_length e.g. value is 10
1条答案
按热度按时间kcrjzv8t1#
简短回答:你会在这里找到一切:整合验证
长回答:
我认为最常见的方法是有一个自定义的用户模型。这意味着拥有你自己的用户模型,它是
AbstractUser
的子类。在那里你可以覆盖字段,添加字段和方法。很好。那么通过那个User模型的ModelForm
创建一个User是完全有意义的。因此,从您的视图开始,您可以将客户端ID传递给提到的ModelForm
的__init__()
方法,并按照@ybl的建议“将其传递到链中”。但是看起来您的项目完全在
django.contrib.auth
上运行,没有对User模型进行任何修改。因此,你说的对,上面的解决方案是“很多”只是为了增加一个验证器。(最有可能的是,你将来无论如何都会添加一个自定义用户模型(更多信息),所以考虑一下这个选项)。编写自定义验证器:
然后在你看来(上面链接为“简短答案”的资源):