2015-04-12 69 views
-1

此表单旨在从视图中的用户处获得答案,并且在提交表单时,用户的答案应该与correct_answer变量匹配以通过并更正。但即使用户输入正确的答案,表格也会显示错误。我究竟做错了什么?为什么表单显示错误?

Default.py

def practice_game(): 

    import random 
    db_length = db(db.verb.id > 0).count() 
    verb = db().select(db.verb.ALL,orderby='<random>',limitby= (0,1))[0] 
    random_int = random.randint(1,6) 
    global correct_answer 
    tense = 'present' 
    if random_int == 1: 
     correct_answer = str(verb.verb_present_je) 
    elif random_int == 2: 
     correct_answer = str(verb.verb_present_tu) 
    elif random_int == 3: 
     correct_answer = str(verb.verb_present_il) 
    elif random_int == 4: 
     correct_answer = str(verb.verb_present_nous) 
    elif random_int == 5: 
     correct_answer = str(verb.verb_present_vous) 
    else: 
     correct_answer = str(verb.verb_present_ils) 

    form=FORM('Your answer:', 
       INPUT(_name='user_answer', requires=IS_EQUAL_TO(correct_answer)), 
       INPUT(_type='submit')) 
    if form.accepts(request,session): 
     response.flash = 'form accepted' 
    elif form.errors: 
     response.flash = 'form has errors' 
    else: 
     response.flash = 'please fill the form' 
    return dict(form=form, counter=session.counter, correct_answer=correct_answer, verb=verb, tense=tense, pronoun=pronoun, current_user=auth.user.first_name) 
+0

什么实际的'form.errors'?它为什么炸毁?您的表单中至少有一项验证检查;也许验证失败了? – Makoto

+0

伊夫只是改变了验证,以IS_NOT_EMPTY并写入新的代码行: “如果form.accepts(请求,会话): 如果request.vars.user_answer == correct_answer: response.flash =‘形式接受’ 别的: response.flash = '错误' ELIF form.errors: response.flash = '的形式有错误' 其他: response.flash ='请填写表格” 它现在显示 “错误” 每次。比较user_answer和correct_answer时出错。 –

+0

...对。但是这并不能回答我的问题 - “form.errors”中有什么? – Makoto

回答

0

形式是自提交,所以动作称为两次 - 加载空白表单一次时,再次提交表单时。在每次通话中,您都会生成一个新的随机正确答案。最初在页面上显示的正确答案(您最终输入表单并提交)不一定与表单提交时生成(并经过验证)的正确答案相同(它们应该与六分之一的时间匹配偶然)。

为了避免这个问题,你可以存储在会话初始正确答案,并利用它来进行验证:

form=FORM('Your answer:', 
      INPUT(_name='user_answer', 
       requires=IS_EQUAL_TO(session.correct_answer)), 
      INPUT(_type='submit')) 
if form.accepts(request,session): 
    response.flash = 'form accepted' 
elif form.errors: 
    response.flash = 'form has errors' 
else: 
    response.flash = 'please fill the form' 
session.correct_answer = correct_answer 
相关问题