Как проверить, является ли переменная буквенно-цифровой, если выполнено определенное условие
Я пытаюсь проверить, равна ли длина имени пользователя 7. Если условие выполнено, то я хочу проверить, является ли оно буквенно-цифровым. Если нет, то я хочу вернуть ошибку, описанную ниже.
Вы ввели неверное имя пользователя
Вот мой код
def clean(self):
super(Register, self).clean()
password = self.cleaned_data.get('password')
password2 = self.cleaned_data.get('password2')
username = self.cleaned_data.get('username')
email = self.cleaned_data.get('email')
if password.islower():
self.errors[''] = self.error_class(["Password must contain an uppercase"])
elif password.isnumeric():
self.errors[''] = self.error_class(["Password must contain an alphabet"])
elif password.isalpha():
self.errors[''] = self.error_class(["Password must contain a number"])
elif len(password) < 8:
self.errors[''] = self.error_class(["Password is too short"])
elif password != password2:
self.errors[''] = self.error_class(["The two password fields must match"])
elif len(username) !=7 and len(username) != 9:
self.errors[''] = self.error_class(["You have entered an invalid username"])
else:
pass
try:
if len(username) == 9:
username = int(username)
except ValueError:
self.errors[''] = self.error_class(["You have entered an invalid username"])
if len(username) == 7:
if username.isalnum() is False:
self.errors[''] = self.error_class(["Youuuu have entered an invalid username"])
else:
pass
else:
self.errors[''] = self.error_class(["You have entered an invalid username"])
for instance in User.objects.all():
if instance.username == username:
self.errors[''] = self.error_class(["User already exist"])
elif instance.email == email:
self.errors[''] = self.error_class(["E-mail already in use"])
else:
pass
return self.cleaned_data
Нет места, чтобы вставить это в комментарии, поэтому я постараюсь сначала ответить на вопрос.
Ваш синтаксис для определения класса неверен, он должен выглядеть примерно так...
Я предполагаю, что класс будет называться Clean, а класс Clean является производным от класса Register?
class Clean(Register):
def __init__(self):
super().__init__().clean()
password = self.cleaned_data.get('password')
password2 = self.cleaned_data.get('password2')
username = self.cleaned_data.get('username')
email = self.cleaned_data.get('email')
if password.islower():
self.errors[''] = self.error_class(["Password must contain an uppercase"])
elif password.isnumeric():
self.errors[''] = self.error_class(["Password must contain an alphabet"])
elif password.isalpha():
self.errors[''] = self.error_class(["Password must contain a number"])
elif len(password) < 8:
self.errors[''] = self.error_class(["Password is too short"])
elif password != password2:
self.errors[''] = self.error_class(["The two password fields must match"])
elif len(username) !=7 and len(username) != 9:
self.errors[''] = self.error_class(["You have entered an invalid username"])
else:
pass
try:
if len(username) == 9:
username = int(username)
except ValueError:
self.errors[''] = self.error_class(["You have entered an invalid username"])
if len(username) == 7:
if username.isalnum() is False:
self.errors[''] = self.error_class(["Youuuu have entered an invalid username"])
else:
pass
else:
self.errors[''] = self.error_class(["You have entered an invalid username"])
for instance in User.objects.all():
if instance.username == username:
self.errors[''] = self.error_class(["User already exist"])
elif instance.email == email:
self.errors[''] = self.error_class(["E-mail already in use"])
else:
pass
return self.cleaned_data
Сначала выясните, что именно вы пытаетесь инстанцировать. И тогда мы сможем попытаться помочь.
Если вы просто хотите посмотреть, как выглядит логика для заданного вами вопроса. Она должна выглядеть следующим образом. Сначала вам нужно создать новую переменную в классе под названием "role", чтобы вы могли хранить, является ли человек студентом или преподавателем. Затем вы можете сделать это внутри класса.
if self.role == 'teacher':
if len(self.id) == 7 and self.id.isalnum():
print('success')
else:
print('whatever error code you want here')
elif self.role == 'student':
if len(self.id) == 9 and self.id.isnumeric():
print('success')
else:
print('whatever error code you want here')
else:
print('error no role given')
Это только отправная точка, потому что класс, который вы создали там, является беспорядочным. Но вы должны быть в состоянии использовать это для создания того, что вы хотите.