在Django AuthenticationForm中,如何仅检查电子邮件和密码is_valid

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

我尝试这样做来删除用户名验证

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 authentication email-validation
1个回答
0
投票

看起来您想绕过 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 方法中的验证逻辑。

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