在输入中输入一个值并提交表单,获取我在表单验证中设置的错误消息。但是刷新时获取在同一输入中输入的先前数据。 查看.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。请帮助我
主要原因之一可能是表单自动完成。如果您不想仅对一个输入进行自动完成:
<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阅读更多相关信息。