응용 프로그램을 Google 응용 프로그램 엔진에 업로드하고 브라우저에서 호출 한 후이 오류 페이지가 나타납니다.webapp.RequestHandler 클래스에서 함수 인수를 보낼 수 없습니다.
Traceback (most recent call last):
File "/base/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 507, in __call__
handler.get(*groups)
File "/base/data/home/apps/bulkloader160by2/1-5.337695659246114067/new_main.py", line 59, in get
transfer = _transfer_funds(src_key,dest_key,amt)
File "/base/data/home/apps/bulkloader160by2/1-5.337695659246114067/new_main.py", line 24, in _transfer_funds
return db.run_in_transaction(_tx)
File "/base/python_lib/versions/1/google/appengine/api/datastore.py", line 1885, in RunInTransaction
DEFAULT_TRANSACTION_RETRIES, function, *args, **kwargs)
File "/base/python_lib/versions/1/google/appengine/api/datastore.py", line 1982, in RunInTransactionCustomRetries
result = function(*args, **kwargs)
File "/base/data/home/apps/bulkloader160by2/1-5.337695659246114067/new_main.py", line 11, in _tx
account = db.get(src_key)
File "/base/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 1178, in get
keys, multiple = datastore.NormalizeAndTypeCheckKeys(keys)
File "/base/python_lib/versions/1/google/appengine/api/datastore.py", line 136, in NormalizeAndTypeCheckKeys
keys, multiple = NormalizeAndTypeCheck(keys, (basestring, Entity, Key))
File "/base/python_lib/versions/1/google/appengine/api/datastore.py", line 115, in NormalizeAndTypeCheck
(types, arg, typename(arg)))
BadArgumentError: Expected an instance or sequence of (<type 'basestring'>, <class 'google.appengine.api.datastore.Entity'>, <class 'google.appengine.api.datastore_types.Key'>); received None (a NoneType).
내 핸들러의 get 메소드에서 transfer_funds를 호출하려고하지만이 오류가 발생,이
#!/usr/bin/env python
import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from models import UserDetails
def _transfer_funds(src_key,dest_key,amt):
def _tx():
account = db.get(src_key)
amount = float(amt)
if amount <= 100.0:
if account.balance < amount:
return None
account.balance -= amount
transfer = Transfer(
parent = account,
amount = -amount,
target = db.get(dest_key)
)
db.put([account, transfer])
return transfer
return db.run_in_transaction(_tx)
def _roll_forward(transfer):
def _tx():
dest_transfer = Transfer.get_by_key_name(str(transfer.key()), parent=transfer.target.key())
if not dest_transfer:
dest_transfer = Transfer(
parent = transfer.target.key(),
key_name = str(transfer.key()),
amount = -transfer.amount,
target = transfer.key().parent(),
other = transfer)
account = UserDetails.get(transfer.target.key())
account.balance -= transfer.amount
db.put([account, dest_transfer])
return dest_transfer
dest_transfer = db.run_in_transaction(_tx)
transfer.other = dest_transfer
transfer.put()
return True
## Model class for Transfers/Transactions
class Transfer(db.Model):
amount = db.FloatProperty(required=True)
target = db.ReferenceProperty(reference_class=UserDetails, required=True)
other = db.SelfReferenceProperty()
timestamp = db.DateTimeProperty(required=True, auto_now_add=True)
class MyHandler(webapp.RequestHandler):
def get(self):
src_username = str(self.request.get('from_username'))
dest_username = str(self.request.get('to_username'))
amt = str(self.request.get('amount'))
src_key = db.GqlQuery('SELECT __key__ FROM UserDetails WHERE user_name = :uname', uname = src_username).get()
dest_key = db.GqlQuery('SELECT __key__ FROM UserDetails WHERE user_name = :uname', uname = dest_username).get()
transfer = _transfer_funds(src_key,dest_key,amt)
progress = _roll_forward(transfer)
srcUserDetails = UserDetails.gql('WHERE user_name = :uname', uname = src_username).fetch(1)
destUserDetails = UserDetails.gql('WHERE user_name = :uname', uname = dest_username).fetch(1)
values = {
'progress': progress,
'srcUser': srcUserDetails,
'destUser': destUserDetails
}
self.response.out.write(template.render('transactions.html', values))
def post(self):
self.redirect('/transactions.html')
def main():
app = webapp.WSGIApplication([
(r'.*',MyHandler)], debug=True)
wsgiref.handlers.CGIHandler().run(app)
if __name__ == "__main__":
main()
내가 GAE는 부하가 균형 않는 것을 이해, 내 main.py 파일입니다 요청을하지만 함수 호출까지 확장됩니까? 왜이 오류가 발생하는지 이해하는 데 도움을주십시오.
아니요, MyHandler에서 할당하는 src_key 값은 데이터 저장소에서 쿼리하는 사용자 이름에 해당하는 유효한 키입니다. – Arun