2012-04-04 11 views
2

私はGAEに絶対に新しく、最初のサンプルアプリケーションを試しています。 私は簡単なHTMlフォームを書いています。送信をクリックすると、フィールドの詳細をデータストアに保存する必要があります。データストアを使用した単純なGAE形式のデータ型例外

私の問題は、私はデータ型の例外を取得していますし、私は私が間違って

import cgi 
import datetime 
import urllib 
import wsgiref.handlers 
import os 
from google.appengine.ext.webapp import template 

from google.appengine.ext import db 
from google.appengine.api import users 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 

class Champion(db.Model): 
    champion_first_name = db.StringProperty() 
    champion_last_name = db.StringProperty() 
    champion_email = db.EmailProperty() 
    champion_phone_code = db.IntegerProperty() 
    champion_phone_number = db.IntegerProperty() 
    diabetic_first_name = db.StringProperty() 
    diabetic_last_name = db.StringProperty() 
    diabetic_age = db.IntegerProperty() 
    diabetic_gender = db.StringProperty() 
    diabetic_email = db.EmailProperty() 
    diabetic_phone_code = db.IntegerProperty() 
    diabetic_phone_number = db.IntegerProperty() 
    diabetic_city = db.StringProperty() 
    diabetic_zipcode = db.IntegerProperty() 
    diabetic_since = db.IntegerProperty() 
    diabetic_relationship = db.StringProperty() 
    checkup_date = db.DateProperty() 
    md_advert_feedback = db.StringProperty() 
    timestamp = db.DateTimeProperty(auto_now_add=True) 

class MainPage(webapp.RequestHandler): 
    def get(self): 
     template_values = {} 
     path = os.path.join(os.path.dirname(__file__), 'main.html') 
     self.response.out.write(template.render(path, template_values)) 

    def post(self): 
     pledge_data = Champion(champion_first_name = cgi.escape(self.request.get('champ_first_name')), 
        champion_last_name = cgi.escape(self.request.get('champ_last_name')), 
        champion_email = cgi.escape(self.request.get('champ_email')), 
        champion_phone_code = cgi.escape(self.request.get('champ_phone_code')), 
        champion_phone_number = cgi.escape(self.request.get('champ_phone_number')), 
        diabetic_first_name = cgi.escape(self.request.get('diab_first_name')), 
        diabetic_last_name = cgi.escape(self.request.get('diab_last_name')), 
        diabetic_age = cgi.escape(self.request.get('diab_age')), 
        diabetic_gender = cgi.escape(self.request.get('diab_gender')), 
        diabetic_email = cgi.escape(self.request.get('diab_email')), 
        diabetic_phone_code = cgi.escape(self.request.get('diab_phone_code')), 
        diabetic_phone_number = cgi.escape(self.request.get('diab_phone_number')), 
        diabetic_city = cgi.escape(self.request.get('diab_city')), 
        diabetic_zipcode = cgi.escape(self.request.get('diab_zip'))) 
        # diabetic_since = cgi.escape(int(self.request.get('diab_since')))) 
        # diabetic_relationship = cgi.escape(self.request.get('diab_relationship')), 
        # md_advert_feedback = cgi.escape(self.request.get('md_ad_feedback')) 
        # checkup_date = cgi.escape(self.request.get('checkup_date')), 
        #) 

     pledge_data.put() 


application = webapp.WSGIApplication([ 
    ('/', MainPage), 
], debug=True) 


def main(): 
    run_wsgi_app(application) 


if __name__ == '__main__': 
    main() 

私は取得していますエラーが、私は答えが絶対的に確信してい

Traceback (most recent call last): 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\webapp\_webapp25.py", line 703, in __call__ 
    handler.post(*groups) 
    File "C:\Users\Rishav\Documents\Google App Engine\helloworld\main.py", line 54, in post 
    diabetic_zipcode = cgi.escape(self.request.get('diab_zip'))) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\db\__init__.py", line 945, in __init__ 
    prop.__set__(self, value) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\db\__init__.py", line 599, in __set__ 
    value = self.validate(value) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\db\__init__.py", line 3141, in validate 
    % (self.name, type(value).__name__)) 
BadValueError: Property champion_phone_number must be an int or long, not a unicode 

あるつもりです見当がつかないということです私をfaceplamにするつもりだけど、今はそれを手に入れていない。私は正しいdbモデルを入れていると信じています。 また、webformフォームフィールドに実際にデータを入力しても差はありません。フィールドをnullのままにしてからsubmitを押しても、同じエラーが発生します。

EDIT: OPはこちらです。誰でも私がやったことに興味がある場合のために ; 一度すべての必須フィールドデータをintに変換すると、別のエラーが見つかりました。 私のフィールドのいずれかにnull値があった場合、私はvalueerror eceptionを取得します。 今私はすべてのデータ入力検証をクライアント側に任せたいと思う。 私は自分のコードを変更しました。

def post(self): 
    pledge_data = Champion() 
    try: 
     pledge_data.champion_first_name = cgi.escape(self.request.get('champ_first_name')) 
     pledge_data.champion_last_name = cgi.escape(self.request.get('champ_last_name')) 
     pledge_data.champion_email = cgi.escape(self.request.get('champ_email')) 
     pledge_data.champion_phone_code = int(cgi.escape(self.request.get('champ_phone_code'))) 
     pledge_data.champion_phone_number = int(cgi.escape(self.request.get('champ_phone_number'))) 
     pledge_data.diabetic_first_name = cgi.escape(self.request.get('diab_first_name')) 
     pledge_data.diabetic_last_name = cgi.escape(self.request.get('diab_last_name')) 
     pledge_data.diabetic_age = int(cgi.escape(self.request.get('diab_age'))) 
     pledge_data.diabetic_gender = cgi.escape(self.request.get('diab_gender')) 
     pledge_data.diabetic_email = cgi.escape(self.request.get('diab_email')) 
     pledge_data.diabetic_phone_code = int(cgi.escape(self.request.get('diab_phone_code'))) 
     pledge_data.diabetic_phone_number = int(cgi.escape(self.request.get('diab_phone_number'))) 
     pledge_data.diabetic_city = cgi.escape(self.request.get('diab_city')) 
     pledge_data.diabetic_zipcode = int(cgi.escape(self.request.get('diab_zip'))) 
     pledge_data.diabetic_since = int(cgi.escape(self.request.get('diab_since'))) 
       # diabetic_relationship = cgi.escape(self.request.get('diab_relationship')), 
       # md_advert_feedback = cgi.escape(self.request.get('md_ad_feedback')) 
       # checkup_date = cgi.escape(self.request.get('checkup_date')), 
       #) 
    except ValueError: 
     pass 

    pledge_data.put() 
+1

+1関連するコードサンプルと完全なトレースバックを含める。ありがとうございました。 – bernie

+0

とpythonタグで追加していただきありがとうございます。それを忘れてしまった。 :D –

+0

心配なし。彼らはGoとJavaのサポートを追加するまでは必要ありませんでした:D – bernie

答えて

2

クイックフィックスは、例えば、明示的にキャストすることです。:

... 
champion_phone_number = int(cgi.escape(self.request.get('champ_phone_number'))), 
... 
+1

私のコメントされた行のいずれかが含まれていれば表示されます。 #diabetic_since = cgi.escape(int(self.request.get( 'diab_since')))) エラーが発生したのは初めてでした。私はcgi.escape節の中でintを使っています。 -_-/facepalm。 –

+0

それはOKです!あなたはあなたのコードではありません。私たちは皆、そんなことをする。そこに出て、次のバグを取得してください!私の推測:それは解決するのがはるかに困難なものになるでしょう。 – bernie

1

すべての要求引数が文字列です。プロパティが必要な場合は、champion_phone_numberなどの別のタイプのものが必要です。明示的にint()に変換する必要があります

関連する問題