Я расширил встроенную форму аутентификации, чтобы использовать загрузочное имя LoginForm. Если пользователь предоставляет неправильные учетные данные, я хочу показать сообщение «Неверные учетные данные». Но функция is_valid() работает только тогда, когда учетные данные (имя пользователя, пароль) точно такие же. Допустим, я указал правильное имя пользователя, но неверный пароль, тогда функция is_valid() не работает. В результате я не могу показать сообщение о том, что пароль неверен. Но я создал другую форму, создав подкласс form.Form. в этом случае функция is_valid() работает и для неправильных учетных данных и отображает сообщение о неправильном имени пользователя и пароле.
это моя форма.
class LoginForm(AuthenticationForm):
username = UsernameField(
widget = forms.TextInput(attrs={'autocomplete':'off','class':'form-control','placeholder':'Enter your email'})
)
password = forms.CharField(
label=_('Password'),
strip=False,
widget=forms.PasswordInput(attrs={'autocomplete':'off','class':'form-control','placeholder':'Enter your password'})
)
это view.py
def signin(request):
if request.method == 'POST':
form = LoginForm(data=request.POST)
if form.is_valid():
print('1')
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(request,username=username,password=password)
print('2')
if user is not None:
login(request,user)
print('3')
return redirect('registration')
else:
print('4')
messages.warning(request,'Wrong Credentials!')
else: # Use form.errors for displaying errors
print(form.errors)
else:
print('get')
form = LoginForm()
return render(request,'account/login.html',{'form':form})
поскольку эта форма не работает. для целей тестирования я создал еще одну форму. и это работает нормально и показывает сообщение об ошибке «Неправильные учетные данные», если какое-либо поле не соответствует имени пользователя и паролю.
class LoginForm(forms.Form):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
username = forms.CharField(max_length=150,widget=forms.TextInput(attrs={"autofocus": True,'class':'form-control','placeholder':'Enter your Email',}))
password = forms.CharField(max_length=150, widget=forms.PasswordInput(attrs={"autocomplete": "current-password",'class':'form-control','placeholder':'Enter your password',}))
Admin.py
from django.contrib import admin
from django.contrib.auth.models import Group
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .models import CustomUser
# Register your models here.
class UserAdmin(BaseUserAdmin):
list_display = ["email", "username", "is_staff"]
list_filter = ["is_superuser"]
fieldsets = [
(None, {"fields": ["email", "password"]}),
("Personal info", {"fields": ["first_name","last_name"]}),
("Permissions", {"fields": ["is_superuser"]}),
]
add_fieldsets = [
(
None,
{
"classes": ["wide"],
"fields": ["email", "username", "password1", "password2"],
},
),
]
search_fields = ["email"]
ordering = ["email"]
filter_horizontal = []
admin.site.register(CustomUser, UserAdmin)
admin.site.unregister(Group)
Подробнее здесь: https://stackoverflow.com/questions/791 ... -credentia
Функция is_valid() формы аутентификации не работает, если учетные данные неверны ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Функция is_valid() формы аутентификации не работает, если учетные данные неверны
Anonymous » » в форуме Python - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Предоставленные учетные данные аутентификации неверны или срок их действия истек.
Anonymous » » в форуме Android - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Функция Azure не запускается с сообщением об ошибке: «Имя пользователя или пароль неверны»
Anonymous » » в форуме C# - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-