Форум сайта python.su
Уже столько перепробовал, но ничего не получается.
Как можно передать request в моем случае (ругается что переменная request не определена )
def mathCaptcha(request): sign = random.choice("+-x") if(sign == "+"): num1 = random.randint(1,9) num2 = random.randint(1,9) request.session['captcha'] = num1 * num2 else: num1 = random.randint(20,40) num2 = random.randint(1,20) if(sign == "+"): request.session['captcha'] = num1 + num2 else: request.session['captcha'] = num1 - num2 return str(num1) + sign + str(num2) + "=" class CommentForm(forms.Form): name = forms.CharField(max_length=100, label='Имя', initial='Гость') email = forms.EmailField(required=False) text = forms.CharField(widget=forms.Textarea(), label='Сообщение') captcha = forms.CharField(label=mathCaptcha(request), validators=[validate_captcha])
Офлайн
А откуда в классе формы переменная request? Да и вообще, думается мне, в моделях request'у нечего делать, это же MVC/MVT.
Подставляйте капчу динамически во вьюшке, которая обрабатывает форму, незачем её вписывать в описание формы.
Отредактировано fata1ex (Июль 15, 2012 19:40:32)
Офлайн
Если я правильно понял, то картинку капчи я вывел отдельно в вьюхе, но тогда валидатор
ругается на request. Тут в основном все старания из-за валидатора.
def validate_captcha(value): if value != request.session['captcha']: raise ValidationError(u'%s неправильный ответ' % value) class CommentForm(forms.Form): name = forms.CharField(max_length=100, label='Имя', initial='Гость') email = forms.EmailField(required=False) text = forms.CharField(widget=forms.Textarea(), label='Сообщение') captcha = forms.CharField(validators=[validate_captcha])
Отредактировано Saturn (Июль 15, 2012 20:09:42)
Офлайн
Saturn, вам нужно ВСЮ логику работы с данными убрать во вьюшки. Всю. Модели - это просто описание ваших данных. Валидацию тоже делайте во вьюшке.
Офлайн
fata1exУ меня модели в model.py там никакой логики нету, а это я создал файл forms.py где создаю обьекты форм. А потом в вьюхе вызываю нужную форму.
Офлайн
Формы в этом случае ничем не отличаются по сути от моделей. У вас есть статические поля и динамические данные. Запихивать динамику в статические вещи - бессмыслица. Валидацию нужно менять или выносить из статики. Здесь есть варианты.
Офлайн