有关django的CBV
在学习django之初,都是一个视图函数对应一个url,当视图函数多的时候,会写不过来。使用类视图函数CBV,可以简化接口,让代码更简洁
以下是写法,直接拷贝去用
基本写法
-
创建app的路由连接(路由分发,可选)
from django.conf.urls import url,include # 导入include urlpatterns = [ # 指定分发的app目录名称 url(r'^app01/',include("app01.urls")), ]
-
在应用下写分路由
from django.conf.urls import url,include from app01 import views urlpatterns = [ url(r'^login/', views.Login.as_view()), ]
-
书写类视图
# views.py from django.shortcuts import render, HttpResponse from django.views import View # 必须导入View,as_view是View里的方法 class Login(View): # 会自动识别get方法,post方法 def get(self,request): return render(request,'index.html') def post(self,request): return HttpResponse('OK')
添加装饰器
给类和类中的方法添加装饰器,需要特殊的姿势
-
在视图函数py文件中导入模块
from django.utils.decorators import method_decorator
-
书写装饰器,以下为模板
def outer(func): def inner(request, *args, **kwargs): print(request.method) rep = func(request, *args, **kwargs) return rep return inner
-
给类中的方法添加装饰器
@method_decorator(outer) def get(self,request): return render(request,'index.html')
-
给整一个类添加装饰器
@method_decorator(outer,name="dispatch") class Login(View): ...
给类或函数添加装饰器都是固定的写法,dispatch就是django默认给我们定义的方法,在执行get或者post方法之前会执行的一个方法