预置视图基类
前面两节的课程,为了使用类来实现视图,我们自己造了个简单的车轮——EzView。 不过这仅仅是为了让你理解原理,以便得心应手地使用Django中预置的视图类。
在Django中,实现视图的基类是View,我们在应用开发中,通常应该基于View 来创建自己的视图类:
class IndexView(View):
def get(self,req):
return HttpResponse('Hello,Class View!')
基类View封装了类方法as_view()来获得一个类的实例,因此我们的路由表 应当这样写:
urlpatterns = [
url(r'^$',IndexView.as_view()),
]
基类View主要实现了对不同HTTP方法的请求的分发,这和我们的轮子EzView 道理是一样的。不过,在当前版本(1.8.5)的实现中,基类View仅仅支持部分 HTTP方法,下表列出了其支持的HTTP方法,以及其对应的继承类应当实现的方法:
HTTP Method | 继承类对应方法 |
---|---|
GET | get(self,req,args,*kwargs) |
POST | post(self,req,args,*kwargs) |
PUT | put(self,req,args,*kwargs) |
PATCH | patch(self,req,args,*kwargs) |
DELETE | delete(self,req,args,*kwargs) |
HEAD | head(self,req,args,*kwargs) |
OPTIONS | options(self,req,args,*kwargs) |
TRACE | trace(self,req,args,*kwargs) |
嗯,把HTTP方法转成小写就对了。
创建一个View的子类ReportView,使其绑定到URL模式^report/(\d+)/$:
1.当用户使用GET方法访问/report/123/时,返回Hi, this is report 123
2.当用户使用DELETE方法访问/report/123/时,返回你想删除我吗?