类视图
在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图。使用类视图可以使用类的一些特性,比如继承等。
View:
django.views.generic.base.View是主要的类视图,所有的类视图都是继承自他。如果我们写自己的类视图,也可以继承自他。然后再根据当前请求的method,来实现不同的方法。比如这个视图只能使用get的方式来请求,那么就可以在这个类中定义get(self,request,*args,**kwargs)方法。以此类推,如果只需要实现post方法,那么就只需要在类中实现post(self,request,*args,**kwargs)。示例代码如下:
class BookListView(View):
def get(self,request,*args,**kwargs):
return HttpResponse("book list view")
class AddBookView(View):
def get(self,request,*args,**kwargs):
return render(request,'add_book.html')
def post(self,request,*args,**kwargs):
book_name = request.POST.get("name")
book_author = request.POST.get("author")
print("name:{},author:{}".format(book_name,book_author))
return HttpResponse("success")
class BookDetailView(View):
def get(self,request,book_id):
print('图书的id是:%s'%book_id)
return HttpResponse("success")
def dispatch(self, request, *args, **kwargs):
print('dispatch')
return super(BookDetailView, self).dispatch(request,*args,**kwargs)
def http_method_not_allowed(self, request, *args, **kwargs):
return HttpResponse("不支持GET以外的其他请求!")