ID とアクセス キーの安全な Cookie を使用して承認されたアクセスをテストする多数の tornado.web.RequestHandler クラスがあります。gen.Task を使用して、インライン コールバックで非同期に mongodb にアクセスします。非同期性のため、反復コードを除外する方法を見つけるのに苦労しています。これどうやってするの?
class MyHandler(RequestHandler):
@tornado.web.asynchronous
@gen.engine
def get(self):
id = self.get_secure_cookie('id', None)
accesskey = self.get_secure_cookie('accesskey', None)
if not id or not accesskey:
self.redirect('/a_public_area')
return
try:
# convert to bson id format to access mongodb
bson.objectid.ObjectId(id)
except:
# if not valid object id
self.redirect('/a_public_area')
return
found_id, error = yield gen.Task(asyncmong_client_inst.collection.find_one,
{'_id': id, 'accesskey': accesskey}, fields={'_id': 1})
if error['error']:
raise HTTPError(500)
return
if not found_id[0]:
self.redirect('/a_public_area')
return
# real business code follows
上記を、おそらく HTTP ステータス コードを生成する関数に組み込みたいと思います。