【发布时间】:2020-04-03 16:07:51
【问题描述】:
我正在尝试创建一个 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()}
views.py
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>
我遇到的问题是,如果行
widgets = {'password': forms.PasswordInput()}
使用,则表格中会预先填写用户名和密码
如果该行被注释掉,表格不会被预填,但是密码是纯文本的。
这里有什么问题?
【问题讨论】:
-
那是你浏览器的问题。用户可以打开或关闭此功能。您为什么不希望您的用户在表单中预先填写他们的凭据,以便他们可以快速登录?只有当您让浏览器(或密码管理器)存储您的密码时才会发生这种情况。
-
所以:不要这样做,它会降低您网站的安全性,因为您实际上是在要求用户选择一个易于输入、易于记忆的密码。
标签: django django-forms