表单验证错误消息未显示

问题描述 投票:0回答:1

网站上没有显示错误消息,也没有任何查看错误的元素

view.py:


from . import forms
from django.shortcuts import render,redirect
from django.contrib.auth import authenticate,login,logout

from django.core import validators
 

def user_login(request):
    form=forms.LoginForm()
    if request.POST:

     form=forms.LoginForm(request)
    
    # if request.user.is_authenticated:
    #     return redirect('home')
    
    return render(request,"login.html",context={'form':form,'message':''})


def home(request):
    if request.user.is_authenticated:
       return render(request,"home.html")
    return redirect(user_login)

def user_logout(request):
    if request.user.is_authenticated and request.META.get('HTTP_REFERER') is not None:
       logout(request)
    return redirect(home)

forms.py:

from django import forms    
from django.core import validators



class  LoginForm(forms.Form):
    name= forms.CharField(validators=[validators.MinLengthValidator(4,"errorororokjjkkj hjkhjkjhk hkhkh j")],widget=forms.TextInput(attrs = {'class':"form-control mb-3",'placeholder':"Username"}))
    password=forms.CharField(widget=forms.PasswordInput(attrs = {'class':"form-control mb-3",'placeholder':"password"}))

登录.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>login</title>
    {% load bootstrap5 %}
  {% bootstrap_css %}
  {% bootstrap_javascript %}
</head>
<body>
  <div class="  w-50 container " style="border-radius: 20px; background-color: darkgrey;">
  <h1 class="mt-5 pt-5 mb-0 text-center   ">login</h1>
  <div class="h-100 d-flex align-items-center justify-content-center ">

    <form class="w-50 m-5  container" method="post" >
      {%csrf_token%}
      
      {{form}}
      {{message}}
      <button type="submit" class="btn btn-primary mt-1" onclick="">login</button>
    </form>  
    
     
  <!-- <form class="w-50 m-5  container" method="post" enctype="multipart/form-data"   >
      {%csrf_token%}
      <label for="exampleFormControlSelect1">Username</label>
      <input type="text" class="form-control mb-3" placeholder="Username" name="username" required>
      <p>{{message}}</p>
      <label for="password">password</label>
      <input class="form-control mb-3" type="password" name="password" placeholder="password" required></input>
    
      <button type="submit" class="btn btn-primary mt-1" onclick="">login</button>
    </form> -->
  </div>
</div>
</div>
</body>
</html>

我想在不使用 request.POST 值的情况下显示错误。请帮助我验证它。我还尝试使用验证错误方法自定义验证器。当我使用 request.POST 方法时,它会显示我传递消息的错误

python django django-forms
1个回答
0
投票

您需要在视图中检查验证

def user_login(request):
    if request.method == 'POST':
        form = forms.LoginForm(request.POST)
        if form.is_valid():
            # Handle valid form submission
            
            return redirect('home')
    else:
        form = forms.LoginForm()

    return render(request, "login.html", context={'form': form})

还在 HTML 中添加错误消息

<form class="w-50 m-5 container" method="post">
  {% csrf_token %}
  
  {{ form.name.label_tag }} {{ form.name }}
  <div class="error-message">{{ form.name.errors }}</div>

  {{ form.password.label_tag }} {{ form.password }}
  <div class="error-message">{{ form.password.errors }}</div>

  <button type="submit" class="btn btn-primary mt-1">Login</button>
</form>
© www.soinside.com 2019 - 2024. All rights reserved.