110:类视图讲解

类视图

  在写视图的时候,Django除了使用函数做为视图,也可使用类做为视图。使用类视图可使用类的一些特性,好比继承等。html

View:

  django.views.generic.base.View是主要的类视图,全部的类视图都是继承自他。若是咱们写本身的类视图,也能够继承自他。而后再根据当前请求的method,来实现不一样的方法。好比这个视图只能使用get的方式来请求,那么就能够在这个类中定义get(self,request,*args,**kwargs)方法。以此类推,若是只须要实现post方法,那么就只须要在类中实现post(self,request,*args,**kwargs)。示例代码以下:django

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

# Create your views here.

class addbook(View):
    def get(self, request, *args, **kwargs):
        return render(request, 'addbook.html')

    def post(self, request, *args, **kwargs):
        author = request.POST.get('author')
        print(author)
        return HttpResponse(author)

    def dispatch(self, request, *args, **kwargs):
        print("在get、post方法以前执行——若是你想在这以前作点事情……")
        return super(addbook, self).dispatch(request, *args, **kwargs)

类视图写完后,还应该在urls.py中进行映射,映射的时候就须要调用View的类方法as_view()来进行转换。示例代码以下:浏览器

urlpatterns = [
    path('', views.bookList.as_view(), name='bookList'),
]

除了get方法,View还支持如下方法['get','post','put','patch','delete','head','options','trace']。函数


  若是用户访问了View中没有定义的方法。好比你的类视图只支持get方法,而出现了post方法,那么就会把这个请求转发给http_method_not_allowed(request,*args,**kwargs)。示例代码以下:post

from django.views.generic import View

# Create your views here.
class bookList(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse('success')

    def http_method_not_allowed(self, request, *args, **kwargs):
        return HttpResponse('不支持GET之外的其它方式!')

# 若是不写 http_method_not_allowed方法,会出现405状态码

urls.py中的映射以下:url

urlpatterns = [
    path('', views.bookList.as_view(), name='bookList'),
]

  若是你在浏览器中访问addbook/,由于浏览器访问采用的是get方法,而addbook只支持post方法,所以以上视图会返回您当前采用的method是:GET,本视图只支持使用post请求!。
  其实无论是get请求仍是post请求,都会走dispatch(request,*args,**kwargs)方法,因此若是实现这个方法,将可以对全部请求都处理到。spa

相关文章
相关标签/搜索