django视图 CBV 和 FBV

视图 CBV 和 FBV

什么是视图?

视图 CBV 和 FBV
什么是视图?

一个视图函数(类),简称视图,是一个简单的Python 函数(类),
它接受Web请求并且返回Web响应。
 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,
 或者一张图片。放置在项目 (project)或应用程序(app)目录中的名为views.py的文件中。
 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,
 或者一张图片。放置在项目 (project)或应用程序(app)目录中的名为views.py的文件中。

FBV

FBV(function base views) 就是在视图里使用函数处理请求。

在之前django的学习中,我们一直使用的是这种方式,所以不再赘述。

CBV

CBV(class base views) 就是在视图里使用类处理请求。

Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了Class-Based-View。可以让我们用类写View。这样做的优点主要下面两种:

Django的url是将一个请求分配给可调用的函数的,而不是一个class。针对这个问题,class-based view提供了一个as_view()静态方法(也就是类方法),调用这个方法,会创建一个类的实例,然后通过实例调用dispatch()方法,dispatch()方法会根据request的method的不同调用相应的方法来处理request(如get() , post()等)。到这里,这些方法和function-based view差不多了,要接收request,得到一个response返回。如果方法没有定义,会抛出HttpResponseNotAllowed异常。

CBV和FBV在路由和视图中的写法

刚开始写的视图都是基于函数版本的,称为FBV,后来写了一个NB的叫CBV,就是基于类的

FBV 就是在URL中的一个路径对应一个函数

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index)
]
 

在视图中

def index(request):
    return render(request, 'index.html')

CBV 就是在 URL中对应一个类

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.IndexView.as_view())     # 执行类后面的as_view()方法,是父类里面的方法
]

在视图中

from django.views import View


class IndexView(View):
  
    # 以get形式访问会执行get函数,一般情况下获取数据
    def get(self, *args, **kwargs):  
        return HttpResponse('666')
      
    # 以post形式访问的话会执行post函数,一般情况下发送数据
    def post(self, *args, **kwargs):  
        return HttpResponse('999')

注意:
  CBV在定义的时候,必须继承View   在定义URL的时候,必须要加as_view
  在类里面使用form表单提交的话,只有get个post方法   在类中使用AJAX发送数据的话,支持定 义一下的很多种方法
restful规范   
get:获取数据   
post:创建数据,提交数据   
put更新   
delete:删除
   patch:局部刷新 …

给CBV添加装饰器
  如果有多个程序需要用户登录验证的话会造成代码冗余,可以使用继承很好的解决这个问题,但是还有更好的方法,那就是基于装饰器实现登录验证

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值