8

我想要一种以集中方式自动将 GET 和 POST 请求路由到后续方法的方法。我想通过以下方式创建我的处理程序。

class MyHandler(BaseHandler):
    def get(self):
        #handle get requests

    def post(self):
        #handle post requests

这就是 webapp2 所做的,我非常喜欢这种风格,在 Django 中可以做到吗?我也想要类方法风格的视图。我应该写什么样的BaseHandler和路由器。

提示:使用 django 通用视图。

4

1 回答 1

25

这在 Django 中被支持为基于类的视图。您可以扩展泛型类View并添加方法,如,get()等。例如 -post()put()

from django.http import HttpResponse
from django.views.generic import View

class MyView(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse('This is GET request')

    def post(self, request, *args, **kwargs):
        return HttpResponse('This is POST request')

类中的dispatch()方法View处理这个 -

调度(请求,*args,**kwargs)

视图的视图部分——接受请求参数和参数并返回 HTTP 响应的方法。

默认实现将检查 HTTP 方法并尝试委托给与 HTTP 方法匹配的方法;GET 将委托给 get(),POST 委托给 post(),依此类推。

默认情况下,HEAD 请求将委托给 get()。如果您需要以不同于 GET 的方式处理 HEAD 请求,您可以覆盖 head() 方法。有关示例,请参阅支持其他 HTTP 方法。

默认实现还将 request、args 和 kwargs 设置为实例变量,因此视图上的任何方法都可以了解调用视图的请求的全部细节。

然后你可以使用它urls.py-

from django.conf.urls import patterns, url

from myapp.views import MyView

urlpatterns = patterns('',
    url(r'^mine/$', MyView.as_view(), name='my-view'),
)
于 2013-05-21T11:35:55.653 回答