Django登录表单在提交错误后不保留输入

时间:2020-10-20 12:25:39

标签: html django django-forms

我有一个登录表单,如果用户输入了无效的用户名或密码,页面将刷新并删除他们输入的用户名值。我想要这样,以便用户名字段在提交失败时不会为空。

views.py

def login_page(request):
    if request.user.is_authenticated:
        return redirect('dashboard:dashboard')
    elif request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('dashboard:dashboard')
        else:
            messages.info(request, 'Username or Password is invalid.')
    return render(request, 'main/login.html', {})

login.html:

<form id="login-form" action="" method="post" role="form">
  {% csrf_token %}
  <div class="form-group">
    <input type="text" name="username" id="username" tabindex="1" class="form-control" placeholder="Username" value="">
  </div>
  <div class="form-group">
    <input type="password" name="password" id="password" tabindex="2" class="form-control" placeholder="Password">
  </div>
  <div class="form-group">
    <div class="row">
      <div class="col-sm-6 center" style="border-radius: 16px;">
        <input type="submit" name="login-submit" id="login-submit" tabindex="5" class="form-control btn btn-login" value="Login">
      </div>
    </div>
  </div>
  <div class="form-group">
    <div class="row">
      <div class="col-lg-12">
        <div class="center">
          <a href="#" tabindex="5" class="forgot-password">Forgot Password?</a>
        </div>
      </div>
    </div>
  </div>
</form>

1 个答案:

答案 0 :(得分:1)

所有有关在上下文中传递用户名的事情。

尝试一下:

views.py

def login_page(request):
    context = {}
    if request.user.is_authenticated:
        return redirect('dashboard:dashboard')
    elif request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('dashboard:dashboard')
        else:
            context["username"] = username
            messages.info(request, 'Username or Password is invalid.')
    return render(request, 'main/login.html', context)

login.html:

...
<input type="text" name="username" id="username" tabindex="1" class="form-control" placeholder="Username" value="{{ username }}">
...