django开发系列:视图高级之类视图
类视图
在写视图的时候,Django除了使用函数作为视图
,也可以使用类作为视图
。使用类视图可以使用类的一些特性
,比如继承
等。
View:django.views.generic.View是主要的类视图。
所有的类视图都是继承于他。如果写自己的类视图,也可以继承于他。
然后再根据当前请求的method,来实现不同的方法。
比如这个视图只能使用get的方式来请求,那么就可以在这个类中定义get(self,request,*args,**kwargs)方法。以此类推,如果只需要实现post方法,那么就只需要在类中实现post(self,request,*args,**kwargs)。
from django.views import View
class BookDetailView(View):
def get(self,request,*args,**kwargs):
return render(request,'detail.html')
类视图写完后,还应该在urls.py中进行映射
,映射的时候就需要调用View的类方法as_view()
来进行转换。
urlpatterns = [
path("detail/<book_id>/",views.BookDetailView.as_view(),name='detail')
]
如果向传递参数
,可以如下操作
# urls.py
urlpatterns = [
path('index/<id>', views.Index.as_views(), name = 'index')
]
# views.py
class Index(View):
def get(self, id, *args, **kwargs):
pass
除了get方法,View还支持以下方法[‘get’,‘post’,‘put’,‘patch’,‘delete’,‘head’,‘options’,‘trace’]。
如果用户访问了View中没有定义的方法。比如你的类视图只支持get方法,而出现了post方法,会出现405错误
。那么就会把这个请求转发给http_method_not_allowed(request,*args,**kwargs)
。示例代码如下:
class Index(View):
def post(self,request,*args,**kwargs):
return HttpResponse("post!")
def http_method_not_allowed(self, request, *args, **kwargs):
return HttpResponse("当前采用的method是:{}"