私はこのような何かをしたいと思います:python appengineでベースハンドラーからハンドラーを呼び出す方法はありますか?
class Basehandler(webapp.RequestHandler):
def __init__(self):
if checkforspecialcase: #check something that always needs to be handled
return SpecialCaseHandler.get()
class NormalHandler(Basehandler):
def get(self):
print 'hello world'
return
class SpecialCaseHandler(Basehandler):
def get(self):
print 'hello special world'
return
アイデアは、特定のケースが満たされた場合に関係なく、最初に呼ばれているものハンドラ、我々は基本的に別のハンドラに切り替えていないということです。
私はかなりPythonに新しいので、私がしようとしていることが可能かどうかは分かりません。またはこれが最良のアプローチであるかどうか。私が実際にやっていることは、登録プロセスを開始しても完了していない場合は誰でもプロファイルページを表示することです。したがって、 "checkforspecialcase"はセッションを見て、不完全な情報をチェックします。
私が試した最初のことでしたが、行っていません。上記の条件の後にself.redirect( '/ special-case')を置くと、次のエラーが発生します。 "AttributeError: 'NormalHandler'オブジェクトに 'request'属性がありません。 get()メソッドまたはpost()メソッド内では使用できますが、初期化メソッドでは使用できません。 –
はい、そうです。 'get'メソッドでその条件を使うのはなぜですか?なぜ私たちは '__init__'を必要としますか? – dheerosaur
この条件をすべてのページに適用したいので、ベースハンドラークラスで一度行ってください。そして、ベースハンドラーを拡張するクラスのget/postメソッドは、ベースハンドラーのget/postメソッドを上書きすると信じています。だから、これをget/postメソッドに入れるには、get/postメソッドごとに記述する必要があります。ただ乾くようにしよう。 –