类视图
1.类视图引入
以函数的方式定义的视图称为函数视图,在Django中也可以使用类来定义一个视图,称为类视图。
使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义
2.类视图使用
定义类试图需要继承自django提供的父类view
配置路由时,使用类试图的as_view()方法来添加
urlpatterns = [
# 视图函数:注册
# url(r'^register/$', views.register, name='register'),
# 类视图:注册
url(r'^register/$', views.RegisterView.as_view(), name='register'),
]
class RegisterView(view)
def get(request):
return HttpResponse('GETOK')
def post(request):
return HttpResponse('POSTOK')
3.类视图使用装饰器
在类视图中使用装饰器不能直接添加装饰器,需要使用methon_decotatoe装饰器使用nama参数指明被装饰的方法
为全部方法添加装饰器
@method_decorator(装饰器名字,name='dispatch')
为特定方法添加装饰器
@method_decorator(装饰器名字,name='方法名')
例:
def my_decorator(func):
print('装饰器1')
def inner(request,*args,**kwargs):
print('装饰器2')
res=func(request,*args,**kwargs)
return res
return inner
@method_decorator(my_decorator,name='dispatch')
class RegisterView(view)
def get(request):
return HttpResponse('GETOK')
def post(request):
return HttpResponse('POSTOK')
4.类视图
ixin拓展类
使用面向对象的继承特性,可以通过定义父类作为拓展类,在父类中定义想要向类试图补充的方法,类试图继承这些拓展父类便于代码复用
定义的扩展父类名称通常以Mixin结尾
中间件
中间件是一个轻量级,底层的插件系统,可以介入django的请求和相应处理过程,修改django的输入或输出,中间件的设计为开发者提供一种无侵入式的开发方式,增强了django框架的健壮性
可以使用中间件,在django处理视图的不同阶段对输入或输出进行干预
每个视图都会输出中间件添加的内容
在请求视图被处理前,中间件由上至下依次执行
在请求视图被处理后,中间件由下至上依次执行
1.在子应用中创建中间件文件,midlleware
2.中间件注册,再setting中的中间件位置,写入路径,并注册 如:子应用,文件名,方法名
例:
创建middleware.py文件,并写入:
def my_middle(get_response):
print('中间件初始代码')
def inner(request,*args,**kwargs):
user=request.GET.get('username')
if user=='jack':
return HttpResponseForbidden('禁止此用户访问')
else:
res=get_response(request)
return res
在setting,MIDDLEWARE设置中,
格式:子应用.middleware文件.方法名