複数モデルの連携処理 (3/6)
作成:2010-01-08 10:53
更新:2010-05-10 21:58
更新:2010-05-10 21:58
■コントローラークラスの作成
では、コントローラーとなるクラスを用意しましょう。ここでは、MemberDataの作成と表示を行う「MemberPage」と、MessageDataの作成と表示を行う「MessagePage」を用意しました。いずれも、そのままGETでアクセスすると、データを作成するフォームと、現在保管されているデータの一覧が表示され、フォームを送信するとPOSTでアクセスし、データを追加する、といった形になります。
いずれも、@login_requiredでログインしていないとアクセス出来ないようにしています。またMessagePageでは、更にログインしている人間のMemberDataが登録されていないとMemberPageにリダイレクトされるようにしてあります。
いずれも、特別に難しいことはしていません。GETでは必要なデータを取得してページをレンダリングし表示していますし、POSTではフォームから送信された値をもとにモデルのインスタンスを作成し、保存しています。それぞれの内容は皆さん自身で考えてみてください。
コントローラーができたら、webapp.WSGIApplicationの引数に、('/member', MemberPage),('/message', MessagePage)というようにマッピング情報を追記しておきましょう。
いずれも、@login_requiredでログインしていないとアクセス出来ないようにしています。またMessagePageでは、更にログインしている人間のMemberDataが登録されていないとMemberPageにリダイレクトされるようにしてあります。
いずれも、特別に難しいことはしていません。GETでは必要なデータを取得してページをレンダリングし表示していますし、POSTではフォームから送信された値をもとにモデルのインスタンスを作成し、保存しています。それぞれの内容は皆さん自身で考えてみてください。
コントローラーができたら、webapp.WSGIApplicationの引数に、('/member', MemberPage),('/message', MessagePage)というようにマッピング情報を追記しておきましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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)プログラミング入門」に戻る