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

複数モデルの連携処理 (3/6)

作成:2010-01-08 10:53
更新:2010-05-10 21:58

■コントローラークラスの作成

では、コントローラーとなるクラスを用意しましょう。ここでは、MemberDataの作成と表示を行う「MemberPage」と、MessageDataの作成と表示を行う「MessagePage」を用意しました。いずれも、そのままGETでアクセスすると、データを作成するフォームと、現在保管されているデータの一覧が表示され、フォームを送信するとPOSTでアクセスし、データを追加する、といった形になります。

いずれも、@login_requiredでログインしていないとアクセス出来ないようにしています。またMessagePageでは、更にログインしている人間のMemberDataが登録されていないとMemberPageにリダイレクトされるようにしてあります。

いずれも、特別に難しいことはしていません。GETでは必要なデータを取得してページをレンダリングし表示していますし、POSTではフォームから送信された値をもとにモデルのインスタンスを作成し、保存しています。それぞれの内容は皆さん自身で考えてみてください。

コントローラーができたら、webapp.WSGIApplicationの引数に、('/member', MemberPage),('/message', MessagePage)というようにマッピング情報を追記しておきましょう。

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

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

●プログラム・リスト●

class MemberPage(webapp.RequestHandler):
  
  @login_required
  def get(self):
    datas = MemberData.all().order('name').fetch(100, 0)
    params = {'datas':datas}
    fpath = os.path.join(os.path.dirname(__file__),'views','member.html')
    html = template.render(fpath,params)
    self.response.headers['Content-Type'] = 'text/html'
    self.response.out.write(html)
    
  def post(self):
    user = users.get_current_user()
    name = self.request.get('name')
    mail = self.request.get('mail')
    tel = self.request.get('tel')
    member = MemberData(user=user,name=name)
    member.tel = tel
    member.save()
    self.redirect('/message')

class MessagePage(webapp.RequestHandler):

  @login_required
  def get(self):
    user = users.get_current_user()
    member = MemberData.all().filter('user', user).get()
    if member:
      datas = MessageData.all().order('-time').fetch(100, 0)
      params = {'member':member,'datas':datas}
      fpath = os.path.join(os.path.dirname(__file__),'views','message.html')
      html = template.render(fpath,params)
      self.response.headers['Content-Type'] = 'text/html'
      self.response.out.write(html)
    else:
      self.redirect('/member')
    
  def post(self):
    user = users.get_current_user()
    message = self.request.get('message')
    member = MemberData.all().filter('user', user).get()
    message = MessageData(member=member,message=message)
    message.save()
    self.redirect('/message')
※関連コンテンツ

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