6. View の定義

6.1. 概要

views.py は、ビジネスロジックを書くために必要なモジュールです。view は呼び出し可能であること、第1引数にリクエストオブジェクトをとること、 werkzeug.Response のインスタンスを返すこと、を満たす必要があります。

6.1.1. いちばん簡単な view

いちばん簡単な view を見てみましょう。

myapp/views.py:

# -*- coding: utf-8 -*-
# The simplest view.

from werkzeug import Response
def index(request):
  return Response("Hello")

超簡単ですね。ページのレンダリングに html テンプレートを使いたい場合は kay.utils.render_to_response() を使ってください。

myapp/views.py:

# -*- coding: utf-8 -*-
# The simplest view.

from werkzeug import Response
from kay.utils import render_to_response

def index(request):
  return render_to_response('myapp/index.html', {'message': 'Hello'})

これだけです。詳しくは kay.utils.render_to_response() を参照してください。

6.1.2. クラスベースの view

view には呼び出し可能なオブジェクトを使うことができます。これは、 kay.handlers.BaseHandler を拡張し、自分でハンドラクラスを定義することによって可能になります。

簡単なクラスベースの view の例を示します。

from kay.handlers import BaseHandler

from myapp.models import Comment

# ..

class CommentHandler(BaseHandler):
  def prepare(self):
    self.comments = Comment.all().order('-created').fetch(100)
    self.form = CommentForm()

  def get(self):
    return render_to_response('myapp/index.html',
                              { 'comments': self.comments,
                               'form': self.form.as_widget()})

  def post(self):
    if self.form.validate(self.request.form):
      if self.request.user.is_authenticated():
        user = self.request.user
      else:
        user = None
      new_comment = Comment(body=self.form['comment'],user=user)
      new_comment.put()
      return redirect(url_for('myapp/index'))
    return self.get()

# If you want a fancy import name, you might want to instantiate
# here as follows:
# comment_handler = CommentHandler()

このハンドラは HTTP メソッドを小文字で書いたのと同名のメソッドをひとつ以上持っていなければなりません。また、現在の HTTP リクエストが使っている HTTP メソッドを実行する前に何らかの処理をさせるために、 perpare メソッドをもたせることができます。

目次

前のトピックへ

5. URL マッピング

次のトピックへ

7. Jinja2 を使用する

このページ