1 装饰器简介
概念:本质上是一个python闭包函数,可以让其他函数在不需要做任何代码的变动的前提下增加额外的功能;返回值也是函数的对象,
作用:提高代码重复利用率,缩减代码量,同时也有助于代码的可读性和可维护性
应用场景:
1 计算某个函数的运行时间和运行次数(通过在外层函数加上时间计算函数或运算次数统计函数)
2 框架的路由传参()
3 函数的运行日志(插入日志)
4 多个函数实现事务处理的一致性(让函数一起成功运行,或一起运行失败)
5 缓存(实现缓存处理)
6 权限校验(在函数外层套上权限验证的代码,实现权限校验)
2 CBV的装饰器使用
1 在路由层使用装饰器
在视图入口处,即路由分发的过程中使用
通过as_view(),类会被转换成视图函数。在转换好的视图函数上直接使用装饰器函数
from django.contrib.auth.decorators import login_required, permission_required
from django.views.generic import TemplateView
from .views import VoteView
urlpatterns = [
path('about/', login_required(TemplateView.as_view(template_name="secret.html"))),
path('vote/', permission_required('polls.can_vote')(VoteView.as_view())),
]
此方法会为该类的所有的方法加上装饰器,而不能为单个方法添加
2 在视图层中使用装饰器
使用 method_decorator 方法将其转换为适用于类视图方法的装饰器
2.1 同时添加多个装饰器
method_decorator方法支持同时添加多个装饰器,先将要用的装饰器放在一个元祖或list中
decorators = [never_cache, login_required]
@method_decorator(decorators, name='dispatch')
class ProtectedView(TemplateView):
template_name = 'secret.html'
@method_decorator(never_cache, name