Django: 路由与视图 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

预置视图基类

前面两节的课程,为了使用类来实现视图,我们自己造了个简单的车轮——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/时,返回你想删除我吗?