django - django登录无效表单
问题描述
我做的一切都正确,但我的登录不起作用我在登录表单中输入了 2 个输入,但用户请求向我发送了 3 个字段,其中 1 个我没有输入,我收到了这个字段电话号码 - 登录密码 - 电话号码
形式*
class LoginForm(AuthenticationForm):
phone_number = forms.CharField(widget=forms.TextInput(
attrs={'class': 'form-control mb-3', 'placeholder': 'phone_number', 'id': 'login-phone_number'}))
password = forms.CharField(widget=forms.PasswordInput(
attrs={
'class': 'form-control',
'placeholder': 'Password',
'id': 'login-pwd',
}
))
看法*
def account_login(request):
if request.user.is_authenticated:
return redirect('/')
if request.method == 'POST':
form = LoginForm(request.POST)
print(form)
print(form.is_valid()) => #false
if form.is_valid():
phone_number = form.cleaned_data.get('phone_number')
password = form.cleaned_data.get('password')
user = authenticate(phone_number=phone_number, password=password)
print(user)
if user is not None:
login(request, user)
return redirect('/')
else:
messages.error(request, "Invalid username or password.")
else:
messages.error(request, "Invalid username or password.")
form = LoginForm(request.POST)
return render(request, "account/login.html", {"form": form})
登录.html*
{% extends "./sub_base.html" %}
{% block title %}Log-in{% endblock %}
{% block sub_content %}
<form class="account-form" action="{% url 'account:login' %}" method="post">
{% csrf_token %}
<h3 class="mb-4">Sign In</h3>
{% if form.errors %}
<div class="alert alert-primary" role="alert">
Error: Username or Password not correct!
</div>
{% endif %}
<label class="form-label">{{ form.username.label}}</label>
{{ form.username}}
<label class="form-label">{{ form.password.label}}</label>
{{ form.password}}
<div class="d-grid gap-2">
<input type="hidden" name="next" value="{{ next }}">
<button class="btn btn-primary py-2 mb-4 mt-5 fw-bold" type="submit" value="Log-in">Sign in
</button>
</form>
{% endblock %}
解决方案
你没有做用户名!?
username = forms.CharField(
widget=forms.TextInput(
attrs={'placeholder': 'username', 'class': 'input100'}),
您在模板中调用form.username
但表单中没有用户名输入?!也许您应该更改username
为login.html
,phone_number
因为视图中没有用户名,我建议request
像这样进行身份验证:
user = authenticate(request,phone_number=phone_number, password=password)
将所有电话号码替换为用户名或为其输入我希望这可行
推荐阅读
- laravel - Laravel 自定义登录第一次失败,出现“未定义路由 [登录]”错误。在第二次尝试中工作正常
- html - 从 HTML 中调用静态 TypeScript 函数
- corda - Corda 白名单未更新
- c# - 如何在基本表单中获取继承表单的大小?
- java - 编译错误:未报告的异常添加;必须被抓住或宣布被扔掉
- c - 理解 GDB 中基本 C 程序中的 asm 指令
- javascript - 如何在将元素推入数组时使用三元运算符
- html - 如何使用 flexbox 将文本与图像水平对齐?
- git - 尝试克隆 git 存储库时出错
- java - 为什么 TextView 不能显示从 android 资源引用的格式化文本?