私はGAEの初心者で、最初のサンプルアプリケーションを試しています。簡単なHTM1フォームを作成しました。[送信]をクリックすると、フィールドの詳細がデータストアに保存される必要があります。
私の問題は、データ型の例外が発生していて、どこが間違っているのかわからないことです。
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
答えは私を面白くするだろうと絶対に確信していますが、私は今それを理解していません。私は正しいdbモデルを入れたと思います。また、実際にWebフォームフォームフィールドにデータを入力してもしなくても違いはありません。フィールドをnullのままにしてから送信を押しても、同じエラーが発生します。
編集:ここでOP。誰かが私がしたことに興味がある場合に備えて; 必要なすべてのフィールドデータをintに変換すると、別のエラーが見つかりました。フィールドのいずれかにnull値がある場合、valueerrorを受け取ります。ここで、すべてのデータ入力検証をクライアント側に残したいと思います。だから私は自分のコードを;に変更しました。
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()