Google App Engine +表单验证

时间:2010-12-22 16:54:33

标签: python django google-app-engine checkbox radiobuttonlist

我想做谷歌应用程序引擎表单验证但我不知道该怎么做? 我试过这样:

from google.appengine.ext.db import djangoforms
from django import newforms as forms


class SurveyForm(forms.Form):
    occupations_choices = (
    ('1', ""),
    ('2', "Undergraduate student"),
    ('3', "Postgraduate student (MSc)"),
    ('4', "Postgraduate student (PhD)"),
    ('5', "Lab assistant"),
    ('6', "Technician"),
    ('7', "Lecturer"),
    ('8', "Other" )
    )

howreach_choices = (
    ('1', ""),        
    ('2', "Typed the URL directly"),
    ('3', "Site is bookmarked"),
    ('4', "A search engine"),
    ('5', "A link from another site"),
    ('6', "From a book"),
    ('7', "Other")
    )

boxes_choices = (
    ("des", "Website Design"),
    ("svr", "Web Server Administration"),
    ("com", "Electronic Commerce"),
    ("mkt", "Web Marketing/Advertising"),
    ("edu", "Web-Related Education")
    )

name = forms.CharField(label='Name', max_length=100, required=True)
email = forms.EmailField(label='Your Email Address:')
occupations = forms.ChoiceField(choices=occupations_choices, label='What is your occupation?')
howreach = forms.ChoiceField(choices=howreach_choices, label='How did you reach this site?')
# radio buttons 1-5
rating = forms.ChoiceField(choices=range(1,6), label='What is your occupation?', widget=forms.RadioSelect)

boxes = forms.ChoiceField(choices=boxes_choices, label='Are you involved in any of the following? (check all that apply):', widget=forms.CheckboxInput)
comment = forms.CharField(widget=forms.Textarea, required=False)

我想这样显示:

template_values = {
        'url' : url,
        'url_linktext' : url_linktext,
        'userName' : userName,

'item1':SurveyForm()             }

我收到此错误消息:

  

追踪(最近一次通话):     文件“C:\ Program Files \ Google \ google_appengine \ google \ appengine \ ext \ webapp_ init _。py”,第515行,致电       handler.get(*基团)     文件“C:\ Program Files \ Google \ google_appengine \ demos \ b00213576 \ main.py”,第144行,获取       self.response.out.write(template.render(path,template_values))     文件“C:\ Program Files \ Google \ google_appengine \ google \ appengine \ ext \ webapp \ template.py”,第143行,在渲染中       return t.render(Context(template_dict))     在wrap_render中输入文件“C:\ Program Files \ Google \ google_appengine \ google \ appengine \ ext \ webapp \ template.py”,第183行       return orig_render(context)     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _。py”,第168行,渲染       return self.nodelist.render(context)     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _。py”,第705行,在渲染中       bits.append(self.render_node(node,context))     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _。py”,第718行,在render_node中       回报(node.render(上下文))     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ template \ defaulttags.py”,第209行,渲染       return self.nodelist_true.render(context)     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _。py”,第705行,在渲染中       bits.append(self.render_node(node,context))     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _。py”,第718行,在render_node中       回报(node.render(上下文))     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _。py”,第768行,在渲染中       return self.encode_output(输出)     在encode_output中输入文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _。py”,第757行       return str(输出)     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ util.py”,第26行, str       return self。 unicode ()。encode(settings.DEFAULT_CHARSET)     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ forms.py”,第73行, unicode       return self.as_table()     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ forms.py”,第144行,as_table       return self._html_output(u'%(label)s%(errors)s%(field)s%(help_text)s',u'%s','',u'\ n%s',False)     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ forms.py”,第129行,_html_output       output.append(normal_row%{'errors':bf_errors,'label':label,'field':unicode(bf),'help_text':help_text})     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ forms.py”,第232行, unicode       value = value。 str ()     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ util.py”,第26行, str       return self。 unicode ()。encode(settings.DEFAULT_CHARSET)     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ widgets.py”,第246行, unicode       返回你'

    \ n%s \ n
'%u'\ n'.join([u'
  • %s
  • '%w代表自己的w] )     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ widgets.py”,第238行, iter       yield RadioInput(self.name,self.value,self.attrs.copy(),choice,i)     文件“C:\ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ widgets.py”,第212行, init       self.choice_value = smart_unicode(choice [0])   TypeError:'int'对象是unsubscriptable

    您是否知道如何在不同情况下进行此验证?

    我尝试过这样做:

    class ItemUserAnswer(djangoforms.ModelForm):
    

    类元:   model = UserAnswer

    但我不知道如何在此表单中添加额外的标签,它会显示在一行中。 你有什么建议吗?

    非常感谢,因为它让我疯狂为什么它仍然不起作用:/

    2 个答案:

    答案 0 :(得分:1)

    内置方法is_valid()应该验证。 提交表单时,我使用HTTP POST

        def post(self):
        try:
            upload_files = self.get_uploads('file')  # 'file' is file upload field in the form
            if upload_files:
                blob_info = upload_files[0]  
        except:
            self.response.out.write('File not uploaded')        
        try:
            data = AForm(data=self.request.POST)
            if data and data.is_valid():
                # Save the data, and redirect to the view page
                entity = data.save(commit=False)
                entity.added_by = users.get_current_user()
                entity.put()
                if upload_files:            
                    im = Image(reference=entity) 
                    im.primary_image = blob_info.key()
                    im.put()
                    entity.put()
                    self.redirect('/serve/%s' % blob_info.key())
            else:
                # Reprint the form
                self.response.out.write('<html><body>'
                                        '<form method="POST" '
                                        'action="/">'
                                        '<table>')
                self.response.out.write(data)
                self.response.out.write('</table>'
                                        '<input type="submit">'
                                        '</form></body></html>')
        except:
            self.redirect('/serve/%s' % blob_info.key())
    

    答案 1 :(得分:0)

    这是问题

      

    rating = forms.ChoiceField(choices = range(1,6),label ='你的职业是什么?',widget = forms.RadioSelect)

    选项设置为整数值。