2012年12月13日木曜日

Django の views.py をクラスにする

Django はバージョン1.3から views.py をクラスにできるようになっていました.
Django 1.4でこれを試してみました.
クラスを使用すると,各URLにGETアクセスがあった場合〜,POSTアクセスがあった場合〜で呼ばれるメソッドが違うので同じ URL で HTTP Method ごとに処理を変えたい場合などに書きやすくなるのではないかと思います.

views.py でクラスベースの Generic View を使用するためには views.pyの中にこのように
# -*- coding: utf-8 -*-
from django.views.generic import View

class Hoge(View):
    def get(self, request):
        pass

    def post(self, request):
        pass

class Piyo(View):
    def get(self, request):
        pass

    def post(self, request):
        pass
View を継承してクラスを作成します. get や post 以外にも, put や delete などもメソッドを書くだけで動作します.
メソッドを用意していない  HTTP Method でアクセスした場合には HTTP ステータスコード405, Method Not Allowed を返します.

継承する View は
  • View
  • TemplateView
  • RedirectView
などいくつか用意されています. View がこれらの大元になっています.

urls.py をこのようにします.
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
from アプリのパッケージ.views import *

urlpatterns = patterns(
    'アプリのパッケージ.views',
    url(r'^hoge$', Hoge.as_view()),
    url(r'^piyo$', Piyo.as_view()),
)
http://ドメイン/hoge に対して GET アクセスすると, Hoge クラスの get メソッドが, POST アクセスをすると post メソッド呼ばれます.
http://ドメイン/piyo に対してのアクセスは同じことが Piyo クラスに対して行われます.

0 件のコメント:

コメントを投稿