Google App Engine + проверка формы - PullRequest
       9

Google App Engine + проверка формы

3 голосов
/ 22 декабря 2010

Я хотел бы сделать проверку формы Google App Engine, но я не знаю, как это сделать? Я пытался так:

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 () }

И у меня есть это сообщение об ошибке:

Traceback (последний вызов был последним): Файл "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, в get 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)) Файл "C: \ Program Files \ Google \ google_appengine \ google \ appengine \ ext \ webapp \ template.py", строка 183, в wrap_render вернуть orig_render (контекст) Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _. Py", строка 168, в рендере. вернуть self.nodelist.render (контекст) Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _. Py", строка 705, в рендере. bits.append (self.render_node (узел, контекст)) Файл "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, в рендере вернуть self.nodelist_true.render (контекст) Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _. Py", строка 705, в рендере bits.append (self.render_node (узел, контекст)) Файл "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, в рендере вернуть self.encode_output (вывод) Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django \ django \ template_ init _. Py", строка 757, в encode_output возврат str (вывод) Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ util.py", строка 26, в str вернуть себя. Юникод (). Кодировать (settings.DEFAULT_CHARSET) Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ forms.py", строка 73, Юникод вернуть self.as_table () Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ forms.py", строка 144, в as_table return self._html_output (u '% (метка) s% (ошибки) s% (поле) s% (help_text) s', u '% s', '', u '
% 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, в Юникод значение = значение. стр () Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ util.py", строка 26, в str вернуть себя. Юникод (). Кодировать (settings.DEFAULT_CHARSET) Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ widgets.py", строка 246, в Unicode return u '

'% 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 (), выбор, я) Файл "C: \ Program Files \ Google \ google_appengine \ lib \ django \ django \ newforms \ widgets.py", строка 212, в init self.choice_value = smart_unicode (choice [0]) TypeError: объект 'int' является неподписаннымпытался сделать это, используя такой вид:
class ItemUserAnswer(djangoforms.ModelForm):

класс Meta: model = UserAnswer

Но я не знаю, как добавить дополнительные метки в эту форму, и она отображается в одной строке,У вас есть какие-нибудь предложения?

Большое спасибо, потому что это сводит меня с ума, почему он до сих пор не работает: /

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Встроенный метод 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())
0 голосов
/ 22 декабря 2010

Вот вопрос

rating = forms.ChoiceField (choices = range (1,6), label = 'Чем вы занимаетесь?', Widget = forms.RadioSelect)

выбрано целочисленное значение.

...