Django 帐户自定义 AuthenticationForm 因无效而失败

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

为什么要给予

form invalid
? 我的用户名密码输入正确。

表格.py

class CustomAuthForm(AuthenticationForm):
    username = forms.CharField(required=True, max_length = 50,
 widget=forms.EmailInput(attrs={"placeholder": "Email", "class":"form-control"}))

    password = forms.CharField(required=True, max_length = 50,
 widget=forms.PasswordInput(attrs={"placeholder":"Password", "class":"form-control"}))

   

views.py

@csrf_protect
def user_login(request):
    if request.user.is_authenticated:
        return redirect('/')

    form=CustomAuthForm(request.POST or None)
    print(request.POST)
    if form.is_valid():
        print(form.cleaned_data)
    else:
        print ('form invalid')

控制台打印

<QueryDict: {'csrfmiddlewaretoken': ['mt5a3e9KyCbVg4OokaDeCu97EDrHVInAwVJmmK3a2xn0Nn4KRi0gt7axWJyRDMmT'], 
'username': ['[email protected]'], 'password': ['mypass']}>

form invalid
python python-3.x django django-forms
1个回答
0
投票

查看 AuthenticationForm 所基于的

CustomAuthForm
源代码
,可以看到它的
__init__
功能与大多数其他形式略有不同。 特别是,它采用
request
对象作为其第一个参数。

# https://github.com/django/django/blob/main/django/contrib/auth/forms.py

def __init__(self, request=None, *args, **kwargs):
    """
    The 'request' parameter is set for custom auth use by subclasses.
    The form data comes in via the standard 'data' kwarg.
    """
    self.request = request
    self.user_cache = None
    super().__init__(*args, **kwargs)

因此,更改视图中的语法:

# from
form=CustomAuthForm(request.POST or None)

# to
form=CustomAuthForm(None, request.POST)
© www.soinside.com 2019 - 2024. All rights reserved.