Django пользовательская валидация формы входа в систему с помощью AJAX
Я не так опытен в написании Python/Back-end, но пытаюсь совершенствоваться. В разработке/локальном сервере я пытаюсь проверить email и пароль пользователя в форме входа... сейчас почти 100% вещей работают, например, предупреждающие сообщения для обязательных входов; однако, из Utils. py файла if user "elif not object_user.allow_private_access:" валидация не работает и, что самое главное, валидация не проверяет пароль пользователя (также закомментировано в Utils.py). Часть "post" в Views.py, возможно, придется обновить.
Я включил свою пользовательскую форму Login из Forms.py, Views.py (для страницы Login) и Utils.py (который делает валидацию и посылает сообщения об ошибках на front-end) и Urls.py. Я не стал добавлять свой AJAX, потому что он и так хорошо работает.
Forms.py
class UserLoginForm(forms.ModelForm):
helper = FormHelper()
helper.add_input(Submit('login_form_submit',
numeratio_static_textLanguage['global_input_alert_maxCharacters_32'],
css_class='global_component-button'))
class Meta:
model = CustomUser
fields = ['email', 'password']
widgets = { 'email': forms.EmailInput(attrs={
'maxlength': '256',
'style': 'text-transform: lowercase',
'id': 'input-email',
'class': 'global_component-input box'}
),
'password': forms.PasswordInput(attrs={
'type': 'password',
'maxlength': '128',
'id': 'input-password',
'class': 'global_component-input box'}
)
}
def __init__(self, *args, **kwargs):
super(UserLoginForm, self).__init__(*args, **kwargs)
self.helper.form_action = ''
self.helper.form_method = 'post'
self.helper.form_id = 'login_form'
self.helper.form_class = 'login_form'
Views.py
Utils.py
def validation_userLogin_form(bound_user_login_form):
if bound_user_login_form.is_valid():
return {'result': True}
else:
error_messages = {}
if bound_user_login_form.errors:
error_messages.update(bound_user_login_form.errors)
return {'result': False, 'error_messages': error_messages}
def validate_field_userLogin(post_request):
error_messages = []
response = {'is_valid_field': False}
if 'email' in post_request:
validate_login_email(post_request, error_messages)
elif 'password' in post_request:
validate_login_password(post_request, error_messages)
if len(error_messages) < 1:
response['is_valid_field'] = True
else:
response['error_messages'] = error_messages
return response
def validate_login_email(post_request, error_messages):
entered_email = post_request['email'].lower()
try:
object_user = get_user_model().objects.get(email__iexact=entered_email)
print(object_user)
if entered_email == '':
error_messages.append(numeratio_static_textLanguage['global_input_alert_mandatoryField'])
elif not object_user.allow_private_access:
error_messages.append(numeratio_static_textLanguage['global_input_alert_noAccess'])
except NumeratioUser.DoesNotExist:
if entered_email == '':
error_messages.append(numeratio_static_textLanguage['global_input_alert_mandatoryField'])
elif not is_valid_format_email(entered_email):
error_messages.append(numeratio_static_textLanguage['global_input_alert_emailIncorrect'])
elif len(entered_email) > 256:
error_messages.append(numeratio_static_textLanguage['global_input_alert_maxCharacters_256'])
def validate_login_password(post_request, error_messages):
entered_password = post_request['password']
if entered_password == '':
error_messages.append(numeratio_static_textLanguage['global_input_alert_mandatoryField'])
# elif entered_password != check_password:
# error_messages.append(numeratio_static_textLanguage['global_input_alert_passwordNotValid'])
elif len(entered_password) > 128:
error_messages.append(numeratio_static_textLanguage['global_input_alert_maxCharacters_128'])
Urls.py
urlpatterns = [
path('login/', views.view_userLogin, name='page__user_login'),
path('login/validate/', views.validate_userLogin, name='page__user_login_validate'),
path('login/validate_email/', views.validate_userLogin_email, name='page__user_login_validateEmail'),
path('login/validate_unique_token/', views.validate_userLogin_unique_token, name='page__user_login_validateUniqueToken'),
.......
]