Уведомления

Группа в Telegram: @pythonsu

#1 Июль 15, 2012 19:19:44

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удается передать request в Django Form

Уже столько перепробовал, но ничего не получается.
Как можно передать 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])



Офлайн

#2 Июль 15, 2012 19:31:50

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Не удается передать request в Django Form

А откуда в классе формы переменная request? Да и вообще, думается мне, в моделях request'у нечего делать, это же MVC/MVT.

Подставляйте капчу динамически во вьюшке, которая обрабатывает форму, незачем её вписывать в описание формы.



Отредактировано fata1ex (Июль 15, 2012 19:40:32)

Офлайн

#3 Июль 15, 2012 20:07:49

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удается передать request в Django Form

Если я правильно понял, то картинку капчи я вывел отдельно в вьюхе, но тогда валидатор
ругается на 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)

Офлайн

#4 Июль 15, 2012 20:13:09

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Не удается передать request в Django Form

Saturn, вам нужно ВСЮ логику работы с данными убрать во вьюшки. Всю. Модели - это просто описание ваших данных. Валидацию тоже делайте во вьюшке.



Офлайн

#5 Июль 15, 2012 20:26:38

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удается передать request в Django Form

fata1ex
У меня модели в model.py там никакой логики нету, а это я создал файл forms.py где создаю обьекты форм. А потом в вьюхе вызываю нужную форму.



Офлайн

#6 Июль 15, 2012 20:32:17

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Не удается передать request в Django Form

Формы в этом случае ничем не отличаются по сути от моделей. У вас есть статические поля и динамические данные. Запихивать динамику в статические вещи - бессмыслица. Валидацию нужно менять или выносить из статики. Здесь есть варианты.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version