刷新页面时获取上一篇帖子请求值

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

在输入中输入一个值并提交表单,获取我在表单验证中设置的错误消息。但是刷新时获取在同一输入中输入的先前数据。 查看.py:


from django.forms import ValidationError 
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):
    if request.method == 'POST':
        form = forms.LoginForm(request.POST.dict())
       
        print(request.POST)
        if form.is_valid():
            # Handle valid form submission
          
            username=form.cleaned_data['name']
            password=form.cleaned_data['password']
             
            user=authenticate(username=username,password=password)
            
            if user is not None:
                login(request,user)
                return redirect(home)
            elif user is None : 
              
              raise ValidationError('required')
    else:
        form = forms.LoginForm()
       
    return render(request, "login.html", context={'form': form})


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)

登录.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.name.label_tag }} {{ form.name }}
      <div class="error-message" style="color:red">{{ 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>
    
     
  <!-- <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>

form.py:

from django import forms    
from django.core import validators

def requiredCheck(value):
    if value is None: 
        raise forms.ValidationError('required')

class  LoginForm(forms.Form):
    name= forms.CharField(required=False,validators=[validators.MinLengthValidator(4,"enter minimum 4 characters"),requiredCheck],widget=forms.TextInput(attrs = {'class':"form-control mb-3",'placeholder':"Username"})) 
    password=forms.CharField(required=False,widget=forms.PasswordInput(attrs = {'class':"form-control mb-3",'placeholder':"password"})) 
    

我想在刷新页面时获得新数据并在表单中进行验证。我尝试在请求中分配一些内容。POST。请帮助我

django django-views django-forms django-templates
1个回答
0
投票

主要原因之一可能是表单自动完成。如果您不想仅对一个输入进行自动完成:

 <form action="/action_page.php" autocomplete="on">
  First name:<input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>
  E-mail: <input type="email" name="email" autocomplete="off"><br>
  <input type="submit">
</form> 

如果您想禁用特定表单中所有输入的自动完成功能:

 <form method="get" autocomplete="off">
  First name:<input type="text" name="fname"><br>
  E-mail: <input type="email" name="email"><br>
  <input type="submit">
</form> 

您可以在w3schools阅读更多相关信息。

© www.soinside.com 2019 - 2024. All rights reserved.