@ -11,28 +11,38 @@ from customer import consts as customer_consts
from myauth . models import DokUser
from myauth . models import DokUser
PASSWORD_MIN_LEN = getattr ( settings , ' PASSWORD_MIN_LEN ' , 7 )
PASSWORD_MIN_LEN = getattr ( settings , ' PASSWORD_MIN_LEN ' , 7 )
PROFILE_CHOICES = (
PROFILE_CHOICES = (
( customer_consts . IP_PROFILE , u ' Индивидуальный предприниматель (ИП) ' ) ,
( customer_consts . IP_PROFILE , ' Индивидуальный предприниматель (ИП) ' ) ,
( customer_consts . ORG_PROFILE , u ' Организация (ООО, ЗАО, ОАО, НКО и т.п.) ' ) ,
( customer_consts . ORG_PROFILE , ' Организация (ООО, ЗАО, ОАО, НКО и т.п.) ' ) ,
)
)
class RegistrationForm ( forms . Form ) :
class RegistrationForm ( forms . Form ) :
""" Форма регистрации нового пользователя. """
""" Форма регистрации нового пользователя. """
email = forms . EmailField ( label = u ' Укажите e-mail ' , max_length = 75 , error_messages = { ' invalid ' : u ' Неверный формат e-mail. ' , } ,
email = forms . EmailField (
help_text = u ' На него будет выслано письмо с подтверждением. ' )
label = ' Укажите e-mail ' ,
max_length = 75 ,
password1 = forms . CharField ( label = u ' Введите пароль ' , min_length = PASSWORD_MIN_LEN , widget = forms . PasswordInput ,
error_messages = { ' invalid ' : ' Неверный формат e-mail. ' } ,
error_messages = { ' min_length ' : u ' Не менее %s символов. ' % PASSWORD_MIN_LEN , } ,
help_text = ' На него будет выслано письмо с подтверждением. '
help_text = u ' Не менее %s символов. ' % PASSWORD_MIN_LEN )
)
password2 = forms . CharField ( label = u ' Повтор пароля ' , widget = forms . PasswordInput )
password1 = forms . CharField (
label = ' Введите пароль ' ,
min_length = PASSWORD_MIN_LEN ,
widget = forms . PasswordInput ,
error_messages = { ' min_length ' : f ' Не менее { PASSWORD_MIN_LEN } символов. ' } ,
help_text = f ' Не менее { PASSWORD_MIN_LEN } символов. '
)
password2 = forms . CharField ( label = ' Повтор пароля ' , widget = forms . PasswordInput )
profile_type = forms . ChoiceField ( label = u ' Тип регистрации ' , choices = PROFILE_CHOICES , widget = forms . RadioSelect ,
profile_type = forms . ChoiceField (
error_messages = { ' required ' : u ' Нужно указать форму собственности вашего бизнеса. ' , } )
label = ' Тип регистрации ' ,
choices = PROFILE_CHOICES ,
widget = forms . RadioSelect ,
error_messages = { ' required ' : ' Нужно указать форму собственности вашего бизнеса. ' }
)
def clean_email ( self ) :
def clean_email ( self ) :
""" Проверить не занят ли email. """
""" Проверить не занят ли email. """
@ -41,7 +51,7 @@ class RegistrationForm(forms.Form):
DokUser . objects . get ( email__iexact = email )
DokUser . objects . get ( email__iexact = email )
except DokUser . DoesNotExist :
except DokUser . DoesNotExist :
return email
return email
raise forms . ValidationError ( u ' Такой e-mail уже зарегистрирован. ' )
raise forms . ValidationError ( ' Такой e-mail уже зарегистрирован. ' )
def clean ( self ) :
def clean ( self ) :
super ( RegistrationForm , self ) . clean ( )
super ( RegistrationForm , self ) . clean ( )
@ -50,18 +60,22 @@ class RegistrationForm(forms.Form):
# проверить чтобы оба пароля совпадали
# проверить чтобы оба пароля совпадали
if password1 and password2 :
if password1 and password2 :
if password1 != password2 :
if password1 != password2 :
set_field_error ( self , ' password2 ' , u ' Пароли не совпадают. ' )
set_field_error ( self , ' password2 ' , ' Пароли не совпадают. ' )
return self . cleaned_data
return self . cleaned_data
class ResetPasswordForm ( forms . Form ) :
class ResetPasswordForm ( forms . Form ) :
""" Форма восстановления пароля. """
""" Форма восстановления пароля. """
email = forms . EmailField ( label = u ' Ваш e-mail ' , max_length = 75 ,
email = forms . EmailField (
error_messages = { ' invalid ' : u ' Неверный формат e-mail. ' , ' required ' : u ' Введите свой e-mail. ' , } )
label = ' Ваш e-mail ' ,
max_length = 75 ,
error_messages = { ' invalid ' : ' Неверный формат e-mail. ' , ' required ' : ' Введите свой e-mail. ' }
)
def __init__ ( self , * args , * * kwargs ) :
def __init__ ( self , * args , * * kwargs ) :
super ( ResetPasswordForm , self ) . __init__ ( * args , * * kwargs )
super ( ResetPasswordForm , self ) . __init__ ( * args , * * kwargs )
self . user_cache = None # кешировать юзера в форме, чтобы повторно не ходить в базу из вьюхи
# кешировать юзера в форме, чтобы повторно не ходить в базу из вьюхи
self . user_cache = None
def clean_email ( self ) :
def clean_email ( self ) :
""" Проверить зарегистрирован ли email. """
""" Проверить зарегистрирован ли email. """
@ -70,7 +84,7 @@ class ResetPasswordForm(forms.Form):
DokUser . objects . get ( email__iexact = email )
DokUser . objects . get ( email__iexact = email )
return email
return email
except DokUser . DoesNotExist :
except DokUser . DoesNotExist :
raise forms . ValidationError ( u ' Такой e-mail не зарегистрирован. ' )
raise forms . ValidationError ( ' Такой e-mail не зарегистрирован. ' )
def clean ( self ) :
def clean ( self ) :
super ( ResetPasswordForm , self ) . clean ( )
super ( ResetPasswordForm , self ) . clean ( )
@ -79,7 +93,7 @@ class ResetPasswordForm(forms.Form):
self . user_cache = DokUser . objects . get ( email__iexact = email )
self . user_cache = DokUser . objects . get ( email__iexact = email )
if self . user_cache :
if self . user_cache :
if not self . user_cache . is_active :
if not self . user_cache . is_active :
raise forms . ValidationError ( u ' Пользователь заблокирован. ' )
raise forms . ValidationError ( ' Пользователь заблокирован. ' )
return self . cleaned_data
return self . cleaned_data
def get_user ( self ) :
def get_user ( self ) :
@ -88,13 +102,17 @@ class ResetPasswordForm(forms.Form):
class ChangePasswordForm ( forms . Form ) :
class ChangePasswordForm ( forms . Form ) :
""" Форма изменения пароля. """
""" Форма изменения пароля. """
old_password = forms . CharField ( label = u ' Ваш пароль ' , widget = forms . PasswordInput )
old_password = forms . CharField ( label = ' Ваш пароль ' , widget = forms . PasswordInput )
password1 = forms . CharField ( label = u ' Новый пароль ' , min_length = PASSWORD_MIN_LEN , widget = forms . PasswordInput ,
password1 = forms . CharField (
error_messages = { ' min_length ' : u ' Не менее %s символов. ' % PASSWORD_MIN_LEN , } ,
label = ' Новый пароль ' ,
help_text = u ' Не менее %s символов. ' % PASSWORD_MIN_LEN )
min_length = PASSWORD_MIN_LEN ,
widget = forms . PasswordInput ,
error_messages = { ' min_length ' : f ' Не менее { PASSWORD_MIN_LEN } символов. ' } ,
help_text = f ' Не менее { PASSWORD_MIN_LEN } символов. '
)
password2 = forms . CharField ( label = u ' Повторите ' , widget = forms . PasswordInput )
password2 = forms . CharField ( label = ' Повторите ' , widget = forms . PasswordInput )
def __init__ ( self , user , * args , * * kwargs ) :
def __init__ ( self , user , * args , * * kwargs ) :
super ( ChangePasswordForm , self ) . __init__ ( * args , * * kwargs )
super ( ChangePasswordForm , self ) . __init__ ( * args , * * kwargs )
@ -104,7 +122,7 @@ class ChangePasswordForm(forms.Form):
""" Проверить старый пароль. """
""" Проверить старый пароль. """
old_password = self . cleaned_data . get ( ' old_password ' )
old_password = self . cleaned_data . get ( ' old_password ' )
if old_password and not self . _user . check_password ( old_password ) :
if old_password and not self . _user . check_password ( old_password ) :
raise forms . ValidationError ( u ' Неверный пароль. ' )
raise forms . ValidationError ( ' Неверный пароль. ' )
return old_password
return old_password
def clean ( self ) :
def clean ( self ) :
@ -114,16 +132,19 @@ class ChangePasswordForm(forms.Form):
# проверить чтобы оба новых пароля совпадали
# проверить чтобы оба новых пароля совпадали
if password1 and password2 :
if password1 and password2 :
if password1 != password2 :
if password1 != password2 :
set_field_error ( self , ' password2 ' , u ' Пароли не совпадают. ' )
set_field_error ( self , ' password2 ' , ' Пароли не совпадают. ' )
return self . cleaned_data
return self . cleaned_data
class ChangeEmailForm ( forms . Form ) :
class ChangeEmailForm ( forms . Form ) :
""" Форма изменения e-mail. """
""" Форма изменения e-mail. """
password = forms . CharField ( label = u ' Ваш пароль ' , widget = forms . PasswordInput )
password = forms . CharField ( label = ' Ваш пароль ' , widget = forms . PasswordInput )
email = forms . EmailField ( label = u ' Новый e-mail ' , max_length = 75 ,
email = forms . EmailField (
error_messages = { ' invalid ' : u ' Неверный формат e-mail. ' , ' required ' : u ' Введите свой e-mail. ' , } )
label = ' Новый e-mail ' ,
max_length = 75 ,
error_messages = { ' invalid ' : ' Неверный формат e-mail. ' , ' required ' : ' Введите свой e-mail. ' }
)
def __init__ ( self , user , * args , * * kwargs ) :
def __init__ ( self , user , * args , * * kwargs ) :
super ( ChangeEmailForm , self ) . __init__ ( * args , * * kwargs )
super ( ChangeEmailForm , self ) . __init__ ( * args , * * kwargs )
@ -133,7 +154,7 @@ class ChangeEmailForm(forms.Form):
""" Проверить пароль. """
""" Проверить пароль. """
password = self . cleaned_data . get ( ' password ' )
password = self . cleaned_data . get ( ' password ' )
if password and not self . _user . check_password ( password ) :
if password and not self . _user . check_password ( password ) :
raise forms . ValidationError ( u ' Неверный пароль. ' )
raise forms . ValidationError ( ' Неверный пароль. ' )
return password
return password
def clean_email ( self ) :
def clean_email ( self ) :
@ -141,22 +162,23 @@ class ChangeEmailForm(forms.Form):
email = self . cleaned_data [ ' email ' ]
email = self . cleaned_data [ ' email ' ]
try :
try :
DokUser . objects . get ( email__iexact = email )
DokUser . objects . get ( email__iexact = email )
raise forms . ValidationError ( u ' Такой e-mail уже зарегистрирован. ' )
raise forms . ValidationError ( ' Такой e-mail уже зарегистрирован. ' )
except DokUser . DoesNotExist :
except DokUser . DoesNotExist :
return email
return email
class LoginForm ( forms . Form ) :
class LoginForm ( forms . Form ) :
""" Форма логина. """
""" Форма логина. """
email = forms . EmailField ( label = u ' Укажите e-mail ' , max_length = 75 )
email = forms . EmailField ( label = ' Укажите e-mail ' , max_length = 75 )
password = forms . CharField ( label = u ' Введите пароль ' , widget = forms . PasswordInput )
password = forms . CharField ( label = ' Введите пароль ' , widget = forms . PasswordInput )
reset_old_login = forms . BooleanField ( label = u ' Сбросить старый вход ' , required = False )
reset_old_login = forms . BooleanField ( label = ' Сбросить старый вход ' , required = False )
# TODO капча на случай если пароль не ввели правильно с первого раза
# TODO капча на случай если пароль не ввели правильно с первого раза
def __init__ ( self , * args , * * kwargs ) :
def __init__ ( self , * args , * * kwargs ) :
super ( LoginForm , self ) . __init__ ( * args , * * kwargs )
super ( LoginForm , self ) . __init__ ( * args , * * kwargs )
self . user_cache = None # кешировать юзера в форме, чтобы повторно не лазить в базу из вьюхи
# кешировать юзера в форме, чтобы повторно не лазить в базу из вьюхи
self . user_cache = None
def clean ( self ) :
def clean ( self ) :
super ( LoginForm , self ) . clean ( )
super ( LoginForm , self ) . clean ( )
@ -169,15 +191,22 @@ class LoginForm(forms.Form):
self . user_cache = authenticate ( username = username , password = password )
self . user_cache = authenticate ( username = username , password = password )
if self . user_cache :
if self . user_cache :
if not self . user_cache . is_active :
if not self . user_cache . is_active :
set_field_error ( self , ' email ' , u ' Пользователь заблокирован. ' )
set_field_error ( self , ' email ' , ' Пользователь заблокирован. ' )
if not self . user_cache . profile . confirmed :
if not self . user_cache . profile . confirmed :
set_field_error ( self , ' email ' , u ' Для подтверждения адреса электронной почты перейдите по адресу, указанному в письме. Если вы не получили письмо с активацией, попробуйте зарегистрироваться ещё раз или укажите другой адрес электронной почты. ' )
msg = " Для подтверждения адреса электронной почты перейдите по адресу, " \
" указанному в письме. Если вы не получили письмо с активацией, " \
" попробуйте зарегистрироваться ещё раз или укажите другой " \
" адрес электронной почты. "
set_field_error ( self , ' email ' , msg )
if self . user_cache . profile . user_session_key and not reset_old_login :
if self . user_cache . profile . user_session_key and not reset_old_login :
set_field_error ( self , ' email ' , u ' Пользователь уже вошёл в систему. Установите флаг " Сбросить старый вход " , чтобы войти. ' )
msg = " Пользователь уже вошёл в систему. Установите флаг " \
" ' Сбросить старый вход ' , чтобы войти. "
set_field_error ( self , ' email ' , msg )
else :
else :
set_field_error ( self , ' password ' , u ' Неверное сочетание e-mail / пароль. ' )
set_field_error ( self , ' password ' , ' Неверное сочетание e-mail / пароль. ' )
except DokUser . DoesNotExist :
except DokUser . DoesNotExist :
set_field_error ( self , ' email ' , u ' Такой e-mail не зарегистрирован. ' )
set_field_error ( self , ' email ' , ' Такой e-mail не зарегистрирован. ' )
return self . cleaned_data
return self . cleaned_data
def get_user ( self ) :
def get_user ( self ) :
@ -185,7 +214,7 @@ class LoginForm(forms.Form):
class CaptchedLoginForm ( LoginForm ) :
class CaptchedLoginForm ( LoginForm ) :
captcha = CaptchaField ( label = u ' Введите код с картинки ' )
captcha = CaptchaField ( label = ' Введите код с картинки ' )
class CustomUserCreationForm ( UserCreationForm ) :
class CustomUserCreationForm ( UserCreationForm ) :
@ -193,6 +222,7 @@ class CustomUserCreationForm(UserCreationForm):
A form that creates a user , with no privileges , from the given email and
A form that creates a user , with no privileges , from the given email and
password .
password .
"""
"""
def clean_username ( self ) :
def clean_username ( self ) :
# Since User.username is unique, this check is redundant,
# Since User.username is unique, this check is redundant,
# but it sets a nicer error message than the ORM. See #13147.
# but it sets a nicer error message than the ORM. See #13147.
@ -207,8 +237,8 @@ class CustomUserCreationForm(UserCreationForm):
model = DokUser
model = DokUser
fields = ( " username " , " email " , )
fields = ( " username " , " email " , )
class CustomUserChangeForm ( UserChangeForm ) :
class CustomUserChangeForm ( UserChangeForm ) :
class Meta :
class Meta :
model = DokUser
model = DokUser
fields = ' __all__ '
fields = ' __all__ '