and*_*dms 0 python passwords django web-applications
是否可以验证密码要求,例如:
使用 Django 内置的密码管理?例如这些:
django.contrib.auth.password_validation.UserAttributeSimilarityValidator
django.contrib.auth.password_validation.MinimumLengthValidator
django.contrib.auth.password_validation.CommonPasswordValidator
django.contrib.auth.password_validation.NumericPasswordValidator
Run Code Online (Sandbox Code Playgroud)
我发现以下 Python 包可以实现我想要的功能,但我想知道它是否可以在本地完成:
https://pypi.org/project/django-password-validators/
谢谢!
您可以编写自己的验证器\nDjango\xe2\x80\x99s 密码验证器有一个相当小的接口。他们必须实现两种方法:
\nvalidate(self, password, user=None)如果密码有效,则必须返回 None;如果密码无效,则必须引发 ValidationError 并显示错误消息。您必须能够处理 None 的用户 - 如果这意味着您的验证器可以\xe2\x80\x99t 运行,则返回 None 不会出现错误。在大多数情况下,您甚至不需要用户验证密码(更适合我们想要防止密码重复使用的情况)\nget_help_text()必须提供一些帮助文本来向用户解释密码要求。
OPTIONS中的任何项目AUTH_PASSWORD_VALIDATORS将传递给构造函数。所有构造函数参数都应该有一个默认值。
from django.core.exceptions import ValidationError\nfrom django.utils.translation import gettext as _\n\nclass CaptialAndSymbolValidator:\n def __init__(self, number_of_capitals=1, number_of_symbols=2, symbols="[~!@#$%^&*()_+{}\\":;\'[]"):\n self.number_of_capitals = number_of_capitals\n self.number_of_symbols = number_of_symbols\n self.symbols = symbols\n\n def validate(self, password, user=None):\n capitals = [char for char in password if char.isupper()]\n symbols = [char for char in password if char in self.symbols]\n if len(capitals) < self.number_of_capitals:\n raise ValidationError(\n _("This password must contain at least %(min_length)d capital letters."),\n code=\'password_too_short\',\n params={\'min_length\': self.number_of_capitals},\n )\n if len(symbols) < self.number_of_symbols:\n raise ValidationError(\n _("This password must contain at least %(min_length)d symbols."),\n code=\'password_too_short\',\n params={\'min_length\': self.number_of_symbols},\n )\n\n def get_help_text(self):\n return _(\n "Your password must contain at least %(number_of_capitals)d capital letters and %(number_of_symbols) symbols."\n % {\'number_of_capitals\': self.number_of_capitals, \'number_of_symbols\': self.number_of_symbols}\n )\n\n\nAUTH_PASSWORD_VALIDATORS = [\n ...\n {\n \'NAME\': \'path.to.your.validators.CaptialAndSymbolValidator\',\n \'OPTIONS\': {\n # use this to override any of the defaults\n \'symbols\': "@^#",\n }\n },\n]\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3508 次 |
| 最近记录: |