发布网友 发布时间:2024-10-08 13:07
共1个回答
热心网友 时间:2024-12-05 16:43
导读:很多朋友问到关于django怎么用cbv的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
Django报错:AttributeError:'function'objecthasnoattribute'as_view'在学习Django视图策略的时候,使用基于类的视图(CBV),遇到了一个问题:
先简单介绍一下CBV:
我的视图如下:
url:
最终在StackOverflow上找到了答案,在这个类上不能使用@login_required这个装饰器,而需要使用method_decorator,并传递一个装饰器(或一个装饰器列表)并告诉应该装饰哪个类。在CBV中,装饰调度类是很常见的。它是一个Django内部使用的方法(在View类中定义)。所有的请求都会经过这个类,所以装饰它会相对安全。如下,注意导入模块fromdjango.utils.decoratorsimportmethod_decorator:
这样问题就解决了,这里贴上StackOverflow原回答链接:Django/python:'function'objecthasnoattribute'as_view'-StackOverflow
对前后端分离设计模式的理解总结(部分Django描述)FBV:Functionbaseview基于方法的视图
CBV:Classbaseview基于类的视图
所以之后我了解到,其实是我没有了解FBV与CBV的概念。
正所谓:类就是把数据封装进对象里,并赋予对象行为的能力。
所以我们完全可以把一个需求的接口封装成为一个类:
因为继承了django的View类,所以在默认情况下,会自动根据请求类型映射该类中对应的请求方法。
但是在所有的pythonweb框架乃至一些其他语言的框架之中,对HTTP请求类型的方法映射都是由一个专门的反射函数来实现的。
所以,总结如下:
另外值得一提的是:自己那个类中的dispatch方法中如果不自己去映射而是调用父类(django的View)的dispatch方法,另外还在前后做一些附加操作,这样的功能跟“装饰器”就很相似了。
一共有10个项目,那让我们一起来慢慢学习吧!
300系列:重定向类
400系列:客户端错误
500系列:服务端错误
如何正确使用DjangoFormsDjangoforms使用容易,又方便扩展,因此Djangoadmin和CBVs基本都基于forms使用.事实上,由于djangoforms的强大验证功能,大多数DjangoAPI框架都是用forms作为其验证的一部分.
虽然djangoforms的学习需要花费一点时间,但如果将forms,models和views结合起来使用,可以花费很少的经历来完成庞大的工作.
1.DjangoForms的强大之处
有些django项目并不直接呈现HTML,二是以API框架的形式存在,但你可能没有想到,在这些API形式的django项目中也用到了djangoforms.djangoforms不仅仅是用来呈现HTML的,他们最强的地方应该是他们的验证能力.下面我们就介绍几种和Djangoforms结合使用的模式:
2.模式一:ModelForm和默认验证
最简单的使用模式便是ModelForm和model中定义的默认验证方式的组合:
#myapp/views.py
fromdjango.views.genericimportCreateView,UpdateView
frombraces.viewsimportLoginRequiredMixin
from.modelsimportArticle
classArticleCreateView(LoginRequiredMixin,CreateView):
model=Article
fields=('title','slug','review_num')
classArticleUpdateView(LoginRequiredMixin,UpdateView):
model=Article
fields=('title','slug','review_num')
正如以上代码中看到的一样:
ArticleCreateView和ArticleUpdateView中设置model为Article
两个view都基于Articlemodel自动生成了ModelForm
这些ModelForm的验证,是基于Articlemodel中定义的field转换而来的
3.模式二,在ModelForm中修改验证
在上面的例子中,如果希望每篇articletitle的开头都是"new",那么应该怎么做呢?首先需要建立自定义的验证(validator):
结语:以上就是首席CTO笔记为大家整理的关于django怎么用cbv的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django怎么用cbv的相关内容别忘了在本站进行查找喔。