如何避免Django的forms.PasswordInput()字段被Chrome自动填充主密码
Django中避免Chrome自动填充PasswordInput字段的方案
你可以通过以下几种方法实现需求,均无需替换forms.PasswordInput()部件:
- 方案1:添加
autocomplete="new-password"属性
这是兼容性最好的官方推荐方案,Chrome等现代浏览器识别到该属性后,会判定该字段为新密码输入位,不会自动填充已保存的站点主密码。
代码示例:
from django import forms class CustomForm(forms.Form): # 你的自定义密码字段 custom_secret_field = forms.CharField( widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}) )
- 方案2:新增隐藏的占位密码字段承接自动填充
如果方案1不生效(部分旧版Chrome存在兼容问题),可以在真实字段前新增一个隐藏的无效密码字段,浏览器的自动填充逻辑会优先填充第一个识别到的密码字段,不会影响真实字段。
代码示例:
from django import forms class CustomForm(forms.Form): # 占位假字段,承接浏览器自动填充内容 dummy_pwd = forms.CharField( widget=forms.PasswordInput(attrs={"style": "display:none", "autocomplete": "off"}), required=False ) # 真实自定义密码字段 custom_secret_field = forms.CharField( widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}) )
- 方案3:使用无效的autocomplete值
对于部分特殊版本的浏览器,可以将autocomplete设置为浏览器不识别的自定义值,触发浏览器放弃自动填充逻辑,比如:
forms.PasswordInput(attrs={"autocomplete": "disable-fill"})
注意:不要使用
autocomplete="off"属性,目前绝大多数现代浏览器针对密码字段会主动忽略该属性,无法达到禁止自动填充的效果。
内容的提问来源于stack exchange,提问作者Nicolas Berthier
相关产品推荐
相关产品推荐

