# FBV版添加班级def add_class(request): if request.method == "POST": class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return redirect("/class_List/") return render(request,"add_class.HTML")CBV
# CBV版添加班级from django.vIEws import VIEwclass AddClass(VIEw): def get(self,request): return render(request,"add_class.HTML") def post(self,request): class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return redirect("/class_List/")
注意:
使用CBV时,urls.py中也做对应的修改:
# urls.py中url(r‘^add_class/$‘,vIEws.AddClass.as_vIEw()),CBV和FBV添加装饰器时候的区别 使用装饰器装饰FBV
def wrapper(func): def inner(*args,**kwargs): start_time = time.time() ret = func(*args,**kwargs) end_time = time.time() print("used:",end_time-start_time) return ret return inner# FBV版添加班级@wrapperdef add_class(request): if request.method == "POST": class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return redirect("/class_List/") return render(request,"add_class.HTML")
使用装饰器装饰CBV
类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。
Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器。
# CBV版添加班级from django.vIEws import VIEwfrom django.utils.decorators import method_decoratorclass AddClass(VIEw): @method_decorator(wrapper) def get(self,request): class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return redirect("/class_List/")
# 使用CBV时要注意,请求过来后会先执行dispatch()这个方法,如果需要批量对具体的请求处理方法,如get,post等做一些 *** 作的时候,这里我们可以手动改写dispatch方法,这个dispatch方法就和在FBV上加装饰器的效果一样。(可以从as_vIEw()进去查看源码)class Login(VIEw): def dispatch(self,request,*args,**kwargs): print(‘before‘) obj = super(Login,self).dispatch(request,**kwargs) print(‘after‘) return obj def get(self,‘login.HTML‘) def post(self,request): print(request.POST.get(‘user‘)) return httpResponse(‘Login.post‘)关于CBV的扩展阅读 总结
以上是内存溢出为你收集整理的Django-(CBV和FBV)全部内容,希望文章能够帮你解决Django-(CBV和FBV)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)