Хочу изменить правила ввода логина, и указать эти правила в сообщении для пользователя. Для этого унаследовал UserCreationForm и добавил свой метод, прошу не ругать за русские имена - мне так удобней, вот код:
class ФормаРегПользователя(UserCreationForm):
def clean_username(self):
"""
Дополнительная проверка на правильность ввода.
Правила: логин должен состоять либо из английских, либо из русских букв и
состоять из двух слов разделённых пробелом, оба слова должны начинаться с
заглавной буквы.
"""
список_русских_букв = "абвгдеёжзиклмнопрстфхцчшщьъэюя "
список_англ_букв = "abcdefghijklmnopqrstuvwxyz "
имя_пользователя = self.cleaned_data["username"]
if имя_пользователя.count(" ") > 1:
raise forms.ValidationError("Разрешается только один пробел.")
elif len(имя_пользователя) > 12:
raise forms.ValidationError("Имя должно быть не более 12 символов.")
elif len(имя_пользователя) < 4:
raise forms.ValidationError("Имя должно быть не менее 4 символов.")
имя_пользователя.strip() # Убирает пробелы с начала и конца строки (если есть).
имя_пользователя.lower() # Перевод всех букв в строчные, для проверки.
# Проверка на наличие русских и английских букв в логине одновременно.
русские_буквы = False
англ_буквы = False
for буква in имя_пользователя:
if буква in список_русских_букв and not буква == " ":
русские_буквы = True
elif буква in список_англ_букв and not буква == " ":
англ_буквы = True
if англ_буквы and русские_буквы:
raise forms.ValidationError("Разрешается либо русские, либо английские буквы!!!")
имя_пользователя.title() # Первые буквы слов теперь заглавные.
return имя_пользователя
Метод в принципе работат именно так как написан, за тем исключением, что не проверяет заглавные буквы. Такое ощущение, что строковые методы вообще не работают. В базу я всегда получаю то как вводил, плюс мой метод не проверяет заглавные буквы вообще, можно смешивать англо-русские - имена пройдут.
Ну и плюс джанговские методы тоже накладываются - он не разрешает пробелы.
Исходя из вышесказанного у меня несколько вопросов:
-
Правильно ли я подошёл к решению задачи?
-
Что за магия со строковыми методами?
-
Как разрешить пробелы?
-
Исходя из п.1, если выбрал неверный способ, то как делать правильно?
Updated 19 June 2015, 17:33 by Michael.