libro
www.tuyano.com
PythonによるGoogle App Engine(GAE)プログラミング入門

Usersによるユーザー認証とエンティティ操作 (4/6)

作成:2010-01-03 19:11
更新:2010-05-10 21:37

■DeletePageクラスの作成

では、このdelete.htmlテンプレートを利用するコントローラークラスを作成しましょう。ここでは、'/del'アクセスすると、DeletePageクラスの処理が呼び出されるようにします。webapp.WSGIApplicationのインスタンス作成文を以下のように修正しておきましょう。
application = webapp.WSGIApplication([
    ('/', MainPage),
    ('/del',DeletePage)
    ], debug=True)
そして、main.pyに以下のリストのようにDeletePageクラスの処理を追記します。

ここでは、getメソッドではusers.get_current_userで現在のユーザーのusersを取得し、これがNoneだった場合には、以下のようにしてログインページにリダイレクトをしています。
self.redirect(users.create_login_url(self.request.uri))
このように、users.create_login_urlで取得したアドレスをself.redirectでリダイレクトすることで、ログインページにジャンプし、ログイン後に再び必要なページに戻る処理が作成できます。

さて、肝心のエンティティを削除する処理ですが、これは以下のような形で行っています。
data = MyData.get_by_id(long(id))
data.delete()
「get_by_id」メソッドで指定したID番号のエンティティを取得し、その「delete」メソッドを呼び出すだけでエンティティは削除されます。実に単純ですね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

class DeletePage(webapp.RequestHandler):
    
  def get(self):
    usr = users.get_current_user()
    if usr == None:
      self.redirect(users.create_login_url(self.request.uri))
      return
    id = self.request.get('id')
    if id:
      data = MyData.get_by_id(long(id))
      msg = 'これを削除していいですか?'
    else:
      data = None
      msg = '削除するエンティティのIDが指定されていません。'
    params = {'data':data,
        'message':msg}
    fpath = os.path.join(os.path.dirname(__file__),'views','delete.html')
    html = template.render(fpath,params)
    self.response.headers['Content-Type'] = 'text/html'
    self.response.out.write(html)

  def post(self):
    id = self.request.get('id')
    data = MyData.get_by_id(long(id))
    data.delete()
    self.redirect('/')

※関連コンテンツ

「PythonによるGoogle App Engine(GAE)プログラミング入門」に戻る