首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django 视图 之FBV与CBV

Django 视图之FBV 与 CBV FBV(function base views) 基于函数视图,就是在视图里使用函数处理请求 CBV(class base views) 基于类的视图,就是在视图里使用类处理请求...,就是使用了类来处理用户的请求,不同的请求我们可以在类中使用不同方法来处理,这样大大的提高了代码的可读性; 基于类的视图实现主要还是通过父类 View 提供的一个静态方法 as_view() ,as_view...方法是基于类的外部接口, 他返回一个视图函数,调用后请求会传递给 dispatch 方法,dispatch 方法再根据不同请求来处理不同的方法。....as_view()的返回值是view,这样看起来CBV基于类的本质也是基于函数,在满足func2的情况下触发视图函数,源码展示如下: @classonlymethod # 绑定给类的 def...as_view(cls, **initkwargs): """Main entry point for a request-response process."""

31310
您找到你想要的搜索结果了吗?
是的
没有找到

DRF类视图让你的代码DRY起来

刚开始写views.py模块的代码,一般都是用def定义的函数视图,不过DRF更推荐使用class定义的类视图,这能让我们的代码更符合DRY(Don't Repeat Yourself)设计原则: ?...我们用它把函数视图改写成类视图,编辑snippets/views.py: from snippets.models import Snippet from snippets.serializers import...()方法返回了一个内部定义的可调用函数: @classonlymethod def as_view(cls, **initkwargs): """Main entry point for a request-response...__name__, key)) # 内部定义了可调用函数 def view(request, *args, **kwargs): self = cls(**initkwargs...东方说 学到这里,已经开始感受到了Django REST framework的强大之处了,我觉得学一个框架,不仅要看如何使用,还需要了解它的设计思路底层实现,这样才能更好的总结为自己的编程思想,写出更漂亮的代码

53010

学生宿舍管理系统(jsp+mysql).rar

是DRF封装的API视图,继承了django.views.generic.base.View: 我们用它把函数视图改写成类视图,编辑snippets/views.py: from snippets.models...snippet.delete() return Response(status=status.HTTP_204_NO_CONTENT) 1234567891011121314151617 类视图的代码跟函数视图是非常类似的...()方法返回了一个内部定义的可调用函数: @classonlymethod def as_view(cls, **initkwargs): “”“Main entry point for a request-response...self = cls(**initkwargs) self.setup(request, *args, **kwargs) if not hasattr(self, 'request')...东方说 学到这里,已经开始感受到了Django REST framework的强大之处了,我觉得学一个框架,不仅要看如何使用,还需要了解它的设计思路底层实现,这样才能更好的总结为自己的编程思想,写出更漂亮的代码

3.7K00

不会DRF?源码都分析透了确定不来看?

' ] get请求 post请求 注意:前后端分离csrf已经没有用了,查看一下源码 def as_view(cls, **initkwargs) return csrf_exempt...是闭包函数view的如下源码 @classonlymethod def as_view(cls, **initkwargs): ··· def view(request...def as_view(cls, **initkwargs): # 校验反射的结果 if isinstance(getattr(cls, 'queryset'...,查看源码发现又回到了Django中的View类,所以本质还是上面一样,用到了闭包返回的view view = super().as_view(**initkwargs) ···...),这里跳转了一下,其实看了父类(View)的源码是上面Django中写视图类继承的View是一样的,这里的(APIView)的as_view只是进行了简单处理去掉了csrf中间件校验,真实使用的还是

1.3K10

Django视图层与模板层

一、视图视图函数(类)简称为视图,就是一个普通的函数(类),它的功能是接收web请求,并返回web响应....的视图层由两种形式构成:FBV基于函数视图(Function base view)CBV基于类的视图(Class base view) 1.4.1FBV 我们前面使用的视图函数就是FBV。...__name__, key)) def view(request, *args, **kwargs):#闭包函数 self = cls(**initkwargs...模板值 1.函数名:{{ 函数名 }} 给HTML函数名的时候,模板语法会自动加括号调用该函数,并将函数的返回值当做页面展示的依据,注意模板语法不支持函数参,也就是说只能给页面无参函数。...',{'n':n}) # 第二种,使用locals()会将当前所在名称空间中所有的名字全部传递给html页面 2.5模板的继承导入 在实际开发中,模板文件彼此之间可能会有大量的冗余代码,为此Django

9.1K10

Django来敲门~第一部分【9.使用Django内置视图处理对象简化开发】

后面会详细讲解Django每一部分的使用方式API了 本节内容 内置视图处理对象的定义 内置视图处理对象的使用 源代码分析 1....内置视图处理对象的定义 对于我们视图处理函数,从最原始的HttpResponse()来进行页面数据的输出,到render()函数进行模板页面的操作,已经是可以满足我们的需求了,但是Django赶脚还不够...P\d+)/vote/$", views.vote, name="vote"), ] 这里路由配置的过程中,通过as_view()函数,会自动对目标视图类进行封装,将视图处理类中的...内置类,我们看一下源代码 # 基础视图对象工具类,用于进行视图的渲染操作,包含了as_view()处理函数 class View(object): """ Intentionally simple...@classonlymethod def as_view(cls, **initkwargs): """ Main entry point for a request-response

88530

Django实战-生鲜电商-用户中心|商品详情

要是,商品的分类要像某宝或是某东,那样有二级三级分类,这样又该怎么处理呢?如果每个功能的数据表都单独设计成用户关联,那功能的不断扩展,会不会影响到整个数据库读写与查询呢?...完成了前一小节的主页,需要对商品详情页单独写一个视图类。会发现,在主页的视图商品详情页视图中,都会先从缓存中去查询有无数据。...所以最好将验证登录作为一个可继承的 mixin 类,这样在其它需要登录验证的视图中就可以直接继承。...① 验证用户的登录状态 class LoginRequiredMixin(object): """验证用户的登录状态""" @classmethod def as_view(cls..., **initkwargs): view = super(LoginRequiredMixin, cls).as_view(**initkwargs) return login_required

62320

Django实战-生鲜电商-用户地址|订单确认

在完成登录到用户提交订单,这一系列的类视图函数,会发现有大量的数据读写操作,像电商这类的项目,更多的是用户在浏览页面的次数比较多,所以在数据查询的场景中都会采用缓存,将用户第一次打开页面,到下一次重新浏览...一、用户地址 用户地址的类视图,包括用户查询地址,也可以让用户创建新的收货地址。 在进入该视图之前,需要先验证用户是否登录,继承 LoginRequiredMinxin 类。...class LoginRequiredMixin(object): """验证用户的登录状态""" @classmethod def as_view(cls, **initkwargs...): view = super(LoginRequiredMixin, cls).as_view(**initkwargs) return login_required(...# 如果地址信息不存在 address = None context = { # "user": user, # django

61220
领券