首页 > 解决方案 > 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 %}

标签: djangodjango-login

解决方案


你没有做用户名!?

  username = forms.CharField(
        widget=forms.TextInput(
            attrs={'placeholder': 'username', 'class': 'input100'}),

您在模板中调用form.username但表单中没有用户名输入?!也许您应该更改usernamelogin.htmlphone_number因为视图中没有用户名,我建议request像这样进行身份验证:

user = authenticate(request,phone_number=phone_number, password=password)

将所有电话号码替换为用户名或为其输入我希望这可行


推荐阅读