Login

Declaring django views like web.py views

Author:
danigm
Posted:
February 5, 2010
Language:
Python
Version:
1.1
Tags:
views class web.py
Score:
-2 (after 2 ratings)

I work a little with web.py framework and I like a lot the view definition.

For each view you define a class and in that class you can define two method, GET and POST. If the http request is a GET request the GET method will be called and if http request is a POST request the POST method is called.

Then you can define common stuff in another method that could be called inside each method, and you have a class for each view.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from django.http import HttpResponse as response
from django.http import HttpResponseNotAllowed

class ViewClass:
    def __call__(self, request, *args, **kwargs):
        self.request = request
        methods = ['POST', 'GET']
        self.methods = [method for method in dir(self)\
                 if callable(getattr(self, method)) and method in methods]

        if request.method in self.methods:
            view = getattr(self, request.method)
            return view(*args, **kwargs)
        else:
            return HttpResponseNotAllowed(self.methods)

class IndexView(ViewClass):
    def GET(self):
        return response("all ok %s" % self.request.method)

    def POST(self):
        return response("all ok %s" % self.request.method) 

index = IndexView()

More like this

  1. Allow separation of GET and POST implementations by agore 2 years, 10 months ago
  2. prevent GET or POST requests by jerzyk 7 years, 4 months ago
  3. Decorator that limits request methods by schinckel 5 years, 9 months ago
  4. Complex Form Preview by smagala 6 years, 1 month ago
  5. View dispatch based on HTTP verb by malcolmt 7 years, 7 months ago

Comments

danigm (on February 5, 2010):

In urls.py the view is "index"

#

Please login first before commenting.