Skip to content

Instantly share code, notes, and snippets.

@ruchej
Last active March 24, 2022 20:39
Show Gist options
  • Save ruchej/aa8825fad6d1e507e7ecb1d21f8f1329 to your computer and use it in GitHub Desktop.
Save ruchej/aa8825fad6d1e507e7ecb1d21f8f1329 to your computer and use it in GitHub Desktop.
class A4ordConfirmForm(CrispyForm):
code = forms.IntegerField(label=l_(u'Код'), required=True)
next_stage = None
form = forms.CharField()
def __init__(self, *args, **kwargs):
super(A4ordConfirmForm, self).__init__(*args, **kwargs)
self.session = get_current_session()
def get_layout(self, *args, **kwargs):
layout_list = [
Field('code', css_class='border border-primary', placeholder=_(u'Введите шестизначный код'), required='required'),
Field('form', value='A4ordConfirmForm', type='hidden'),
Div(
Submit('submit', _(u'Подтвердить почту'), css_class='btn-block'),
)
]
return Layout(*layout_list)
def clean_code(self):
user_id = self.session['user_id']
password = self.cleaned_data['password']
user = User.objects.get(id=user_id)
if user.check_password(password):
self.session['password'] = password
else:
raise ValidationError(_('Пароль не правильный'), code='password invalid')
return password
def clean(self):
data = self.cleaned_data
data['next_stage'] = self.next_stage
data['form'] = self
return data
class A4ordPasswordForm(CrispyForm):
password = forms.CharField(label=l_(u'Логин'), required=True, widget=forms.PasswordInput)
is_agree = forms.BooleanField(required=False, initial=False)
next_stage = A4ordConfirmForm
form = forms.CharField()
def __init__(self, *args, **kwargs):
super(A4ordPasswordForm, self).__init__(*args, **kwargs)
self.session = get_current_session()
def get_layout(self, *args, **kwargs):
self.helper.label_class = 'sr-only'
layout_list = [
Field('password', css_class='border border-primary', placeholder=_(u'Пароль'), required='required'),
'is_agree',
Field('form', value='A4ordPasswordForm', type='hidden'),
Div(
Submit('submit', _(u'Войти'), css_class='btn-block'),
)
]
return Layout(*layout_list)
def clean_password(self):
user_id = self.session['user_id']
password = self.cleaned_data['password']
user = User.objects.get(id=user_id)
if user.check_password(password):
self.session['password'] = password
else:
raise ValidationError(_('Пароль не правильный'), code='password invalid')
return password
def clean(self):
data = self.cleaned_data
data['next_stage'] = self.next_stage
data['form'] = self
return data
class A4ordLoginForm(CrispyForm):
login = forms.CharField(label=l_(u'Логин'), required=True)
next_stage = A4ordPasswordForm
form = forms.CharField()
def __init__(self, *args, **kwargs):
super(A4ordLoginForm, self).__init__(*args, **kwargs)
self.session = get_current_session()
def get_layout(self, *args, **kwargs):
self.helper.label_class = 'sr-only'
layout_list = [
Field('login', css_class='border border-primary',
placeholder=_(u'E-mail или телефон'), required='required'
),
Field('form', value='A4ordLoginForm', type='hidden'),
Div(
Submit('submit', _(u'Далее'), css_class='btn-block'),
)
]
return Layout(*layout_list)
def clean_login(self):
login = self.cleaned_data['login'].strip()
try:
user = User.objects.get(
Q(username=login) | Q(phone=login)
)
self.session['user_id'] = user.id
except User.DoesNotExist:
raise ValidationError(_('Пользователь {} не найден'.format(login)), code='not found')
return login
def clean(self):
data = self.cleaned_data
data['next_stage'] = self.next_stage
data['form'] = self
return data
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment