我尝试这样做来删除用户名验证
def clean_username(self):
return "valid_username"
但是
is_valid()
方法显示错误。即使我提供了正确的用户名和密码
我也试过这个
def clean_username(self):
return self.cleaned_data.get('username')
views.py
def login(request):
if request.method == 'POST':
form = LoginUser(request=request.POST, data=request.POST)
if form.is_valid():
print(True)
print(form.cleaned_data['username'])
print(form.cleaned_data['password'])
print(form.is_valid())
else: form = LoginUser()
context ={
'form': form,
}
return render(request, 'login.html', context)
forms.py
class LoginUser(AuthenticationForm):
username = forms.CharField(max_length=20, required=True, widget=forms.TextInput(attrs={'class': form_class, 'placeholder': 'username', }))
password = forms.CharField(min_length=8, required=True, widget=forms.PasswordInput(attrs={'class': form_class, 'placeholder': 'password', }))
def clean_username(self):
return "valid_username"
我想我需要改变
is_valid
方法
看起来您想绕过 Django AuthenticationForm 中的默认用户名验证。在您的自定义 LoginUser 表单中,您已重写 clean_username 方法以始终返回“valid_username”。但是,您仍然面临 form.is_valid() 返回 false 的问题。
问题在于 AuthenticationForm 还对用户名进行了额外的验证,并且简单地从 clean_username 返回常量字符串并不能满足此验证。
要处理此问题,您可以重写 LoginUser 表单中的 clean 方法。这是您表格的更新版本:
from django.contrib.auth.forms import AuthenticationForm
class LoginUser(AuthenticationForm):
username = forms.CharField(max_length=20, required=True, widget=forms.TextInput(attrs={'class': form_class, 'placeholder': 'username'}))
password = forms.CharField(min_length=8, required=True, widget=forms.PasswordInput(attrs={'class': form_class, 'placeholder': 'password'}))
def clean(self):
cleaned_data = super().clean()
username = cleaned_data.get('username')
# Your custom validation logic here
if username != "valid_username":
self.add_error('username', 'Invalid username')
return cleaned_data
在此示例中,重写 clean 方法以对用户名执行自定义验证。如果用户名不是“valid_username”,则会向表单添加错误,并且 form.is_valid() 将返回 False。根据您的要求调整 clean 方法中的验证逻辑。