Django框架之类视图

所谓类视图就是用类定义的视图,其主要支持客户端在用不同的请求方式发起的HTTP请求。

首先,我们需要明确一下类视图的好处:

1.代码可读向高;

2.相对于视图函数具有更高的代码复用性;

3.便于维护。

类视图的定义格式如下:

# 1. 导入视图模块
from django.views.generic import View

class
ObjectView(View): """2. 定义一个类视图"""   


  # 3.编写视图函数 def get(self, request): """处理GET请求""" return HttpResponse('以GET请求方式发起的HTTP请求') def post(self, request): """处理POST请求""" return HttpResponse('以POST请求方式发起的HTTP请求')

在类视图定义的时候我们需要注意一下几点:

1. 类视图必须继承View类;

2. 类视图中的方法必须以请求方式的小写形式来命名;

视图函数我们编写完了,那么接下我们就要配置路由了。

我们需要在子路由中添加上一下代码:

urlpatterns = [
    # 视图函数:注册
    # url(r'^index/$', views.index, name='index'),
    # 类视图:注册
    url(r'^index_get/$', views.ObjectView.as_view(), name='ObjectView'),
]

这里注意类视图一定要调用as_view()方法。

下面我来简述一下as_view()方法的执行流程:

1. 类视图在路由中调用as_view()方法,

2. as_view()方法语法上是一个闭包,它会调用它的内层函数view(),

3. view()会将请求的对象及参数接收,传递给dispatch()方法并调用dispatch()方法,

4. dispatch()方法会接收传递的参数,并且通过python中的底层函数getattr()获取到根据请求方式确定的类视图中的方法。

5. 最后再将方法的引用逐层返回,从而完成类视图中的方法的调用。

为类视图添加装饰器

装饰器对大家来说,我相信都不陌生,其原理我就不赘述了,

接下我会为大家简单介绍一下如何给类视图添加装饰器。

说到需要给类视图添加装饰器,那么第一步就是编写一个装饰器。

1.编写装饰器:

def decorator(func):
    def inner(*args, **kwargs):
        print('装饰内容1')
        ret = func(*args, **kwargs)
        print('装饰内容2')
        return ret
    return inner

既然装饰器编写完成,那么接下来我们就编写一个类视图。

2. 编写类视图:

class register2(View):
    def get(self,request):
        print('Classess GET Content')
        return HttpResponse('Classess GET OK')

    def post(self,request):
        print('Classess POST Content')
        return HttpResponse('Classess POST OK')

现在,我们所有需要的东西都已准备完毕了,万事俱备只欠添加了。

3. 给类视图添加装饰器:

为类视图添加装饰器,一共有三种方法,接下来我将会为大家简单介绍一下类视图添加装饰器的三种方法。

第一种方式给类视图添加装饰器:

# 第一种方式给类视图添加装饰器
# 1. 导入模块
from django.utils.decorators import method_decorator

# 2. 给类视图添加装饰器
@method_decorator(decorator,name='dispatch')
class register2(View):
    pass
# 注意:
# 通过这种方式添加的装饰器,会给所有的方法添加上。

第二种方式给类视图添加装饰器:

# 第二种方式给类视图添加装饰器
# 1. 导入模块
from django.utils.decorators import method_decorator

# 2. 给类视图添加装饰器
@method_decorator(decorator, name='get')
class registter2(View):
    pass

# 注意:
# 通过此方式添加的装饰器,会给类视图中指定的方法添加上。

第三种方式给类视图添加装饰器:

# 第三种方式给类视图添加装饰器
# 1. 导入模块
from django.utils.decorators import method_decorator

# 2. 给类视图添加装饰器
class register2(View):
    @method_decorator(decorator)
    def get(self,reqeust):
        return HttpResponse('Is ok ')

    def post(self,reqeust):
        return HttpResponse('Is ok ')

# 注意:
# 通过此方式可以给类中的多个方法添加装饰器

类视图的扩展:

类视图的扩展,直白点说就是类的继承,将所有重复的代码,封装到一个工具类中,然后通过继承这个工具类,就可以直接调用这些封装好的属性或方法了。

# 扩展类的命名一般以 Mixin 结尾
class CreateMixin(object):
    def create(self,request,*args,**kwargs):
        print('Create Mixin Run ...')
        return HttpResponse('Create')

class ListMixin(object):
    def lister(self,request,*args ,**kwargs):
        print('List Mixin Run ...')
        return HttpResponse('List')

class IndexView(CreateMixin, ListMixin, View):
    def get(self,request):
        resp = self.create(request)
        resp.content = str(resp.content.decode()) + ' Index'
        print('Get Run ..')
        return resp

    def post(self,request):
        print('POST Run ..')
        return self.lister(request)
posted @ 2019-12-27 22:50  老王同鞋  阅读(401)  评论(0编辑  收藏  举报