Django-(CBV和FBV)

Django-(CBV和FBV),第1张

概述FBV # FBV版添加班级def add_class(request): if request.method == "POST": class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return r FBV
# 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)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1191364.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存