如何停止Django PasswordInput预填充表单

如何停止Django PasswordInput预填充表单,django,django-forms,Django,Django Forms,我正在尝试创建一个django表单以允许用户登录 forms.py class LoginForm(forms.ModelForm): username = forms.CharField(label='User name', max_length=30) password = forms.PasswordInput() class Meta: model = User fields = '__all__' wid

我正在尝试创建一个django表单以允许用户登录

forms.py

class LoginForm(forms.ModelForm):
    username = forms.CharField(label='User name', max_length=30)
    password = forms.PasswordInput()

    class Meta:
        model = User
        fields = '__all__'    
        widgets = {'password': forms.PasswordInput()}
def login_view(request):
    form_context = {'login_form': LoginForm,}
    url = "users/login.html"
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        ...
    else:
        context = form_context
    return render(request, url, context)
视图.py

class LoginForm(forms.ModelForm):
    username = forms.CharField(label='User name', max_length=30)
    password = forms.PasswordInput()

    class Meta:
        model = User
        fields = '__all__'    
        widgets = {'password': forms.PasswordInput()}
def login_view(request):
    form_context = {'login_form': LoginForm,}
    url = "users/login.html"
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        ...
    else:
        context = form_context
    return render(request, url, context)
login.html

<form method="post" action="{% url 'login' %}">
{% csrf_token %}
    <table>
        <tr>
            <td>{{ login_form.username.label_tag }}</td>
            <td>{{ login_form.username }}</td>
            <td rowspan="2"><button type="submit" class="btn btn-success">Login</button></td>
        </tr>
        <tr>
            <td>{{ login_form.password.label_tag }}</td>
            <td>{{ login_form.password }}</td>
        </tr>
    </table>
</form>
使用,然后表单中预先填写用户名和密码

如果该行被注释掉,则不会预先填充表单,但密码为纯文本


这里出了什么问题?

您只需关闭“自动完成”:

password = forms.PasswordInput(widget=forms.TextInput(attrs={'autocomplete':'off'}))
或对窗体禁用它:

<form method="post" action="{% url 'login' %}" autocomplete="off">


这是你浏览器的特色。用户可以打开或关闭此功能。为什么您不希望您的用户在表单中预先填写他们的凭据,以便他们可以快速登录?只有当您让浏览器(或密码管理器)存储密码时才会发生这种情况。因此:不要这样做,这会降低您网站的安全性,因为您实际上是在要求用户选择一个易于键入、易于记忆的密码。这是获得想要使用安全密码的用户投诉的可靠方法(每个网站的密码不同)而且不知道他们的密码。i、 一个让用户为你的网站选择错误密码的可靠方法。告诉OP?我只是在回答这个问题。我知道,但是有一个建议,比如:不要那样做!在这里会有帮助的。这不利于网络的安全。幸运的是,密码管理员现在开始忽略这个自动完成的BS。手动输入密码怎么会比使用自动填充密码更不安全呢?我已经接受了答案。显然这里有一罐虫子