当前位置: 首页 > news >正文

数据管理网站模板宁波网站推广公司价格

数据管理网站模板,宁波网站推广公司价格,广东莞业工程设计有限公司,旅行WordPress主题Django Class-Based Views (CBV) 与 DRF APIView 的区别解析 在 Django 开发中,基于类的视图(Class-Based Views, CBV)是实现可重用性和代码结构化的利器。而 Django REST Framework (DRF) 提供的 APIView 是针对 API 开发的扩展。 一、CBV …

Django Class-Based Views (CBV) 与 DRF APIView 的区别解析

在 Django 开发中,基于类的视图(Class-Based Views, CBV)是实现可重用性和代码结构化的利器。而 Django REST Framework (DRF) 提供的 APIView 是针对 API 开发的扩展。


一、CBV 视图解析
class BookView(View):def get(self, request):return HttpResponse("View GET请求...")def post(self, request):return HttpResponse("View POST请求...")def delete(self, request):return HttpResponse("View DELETE请求...")

BookView 继承自 Django 提供的 View 类,它定义了三个常见的 HTTP 方法(GET、POST 和 DELETE)。这里的 View 类是一个基类,用来处理请求方法的分发。

1. View 类中的 as_view
class View:def as_view(cls):def view(request, *args, **kwargs):self = cls()  # 实例化 BookView 类return self.dispatch(request, *args, **kwargs)return view
  • as_view 方法返回一个闭包函数 view,当有请求进来时,view 函数会被调用。
  • view 内部实例化视图类 BookView(),然后调用 dispatch 方法进行请求处理。
2. dispatch 方法
def dispatch(self, request, *args, **kwargs):handler = getattr(self, request.method.lower())  # 获取对应的处理方法,如 get/postreturn handler(request, *args, **kwargs)
  • dispatch 方法根据请求的 HTTP 方法(如 GET、POST 等),通过 getattr 动态调用对应的方法。
  • 如果是 GET 请求,它会调用 self.get();如果是 POST 请求,则调用 self.post(),以此类推。
3. 路由绑定
path("book/", views.BookView.as_view())

通过 as_view() 将类视图转换为可调用的视图函数,进而绑定到特定的 URL 路径。


二、DRF 中的 APIView 解析

DRF 提供的 APIView 是 CBV 的增强版,专门用于构建 API。它继承并扩展了 Django 的 View 类,增加了认证、权限和限流机制。

from rest_framework.views import APIViewclass BookView(APIView):def get(self, request):return HttpResponse("APIView GET请求...")def post(self, request):return HttpResponse("APIView POST请求...")def delete(self, request):return HttpResponse("APIView DELETE请求...")
1. APIView 中的 as_view
class APIView:def as_view(cls):view = super().as_view()  # 调用父类 View 的 as_view 方法return view
  • APIView 重写了 as_view,但它仍然调用了 super().as_view(),也就是继承了 View 类中的逻辑。
  • 这意味着请求首先会经过 View 的分发机制。
2. dispatch 方法的增强
def dispatch(self, request, *args, **kwargs):request = self.initialize_request(request, *args, **kwargs)  # 初始化新的 request 对象self.request = request# 初始化:认证、权限、限流组件self.initial(request, *args, **kwargs)handler = getattr(self, request.method.lower())  # 获取对应的处理方法return handler(request, *args, **kwargs)
  • dispatch 方法做了更多的工作。除了请求方法的分发,还包括对请求对象的初始化(initialize_request),以及认证、权限和限流(initial)的处理。
  • 这些增强使 APIView 非常适合用于 API 开发,因为它考虑到了 API 常见的安全和性能需求。
3. 认证、权限、限流

APIView 会自动调用 DRF 的认证、权限和限流组件:

  • 认证self.initial 方法会触发 authentication_classes 中定义的认证机制。
  • 权限:同理,它会检查 permission_classes 中定义的权限控制。
  • 限流:则通过 throttle_classes 实现。

三、对比总结
特性Django View (CBV)DRF APIView
请求分发通过 dispatch 分发到 getpost 等方法继承自 View,同时增加了请求对象的初始化
请求处理只负责 HTTP 方法的处理增加了认证、权限、限流机制
适用场景适用于通用的 Web 开发适用于 API 开发,安全机制健全
使用场景分析
  • CBV 适合传统的 Web 应用开发,尤其是以模板渲染为主的场景。
  • APIView 则更适合 RESTful API 开发,它内置了很多用于处理 API 请求的功能,比如认证和限流,使得开发者能更专注于业务逻辑,而不必重复造轮子。

通过对 CBV 和 APIView 的对比分析,我们可以发现它们的核心逻辑相似,但在实际使用中,APIView 具有更多的扩展能力,尤其是对于 API 开发,DRF 的设计让开发者能更好地应对复杂的需求。

http://www.mnyf.cn/news/41990.html

相关文章:

  • 安徽网站公司网站外贸网站建设公司哪家好
  • 怎么做模板网站的报价表线上营销推广方式都有哪些
  • 网络设计毕设多地优化完善疫情防控措施
  • 免费制作自己的微网站吗成都网站seo厂家
  • 潜江资讯网免费发布信息seo的中文含义是什么
  • 谷歌 网站做推广互联网推广平台
  • 复制单页网站 教程2345网址导航智能主板
  • ant design 做网站seo是什么意思
  • 扬子科技网站建设网站优化及推广
  • 北京市建设厅网站首页厦门网站推广优化哪家好
  • 怎么把在微企点做响应式网站网站友链
  • 平果最新款手机网站seo搜索引擎的原理是什么
  • 做网站月收入湖南百度推广开户
  • 怎么做网站最便宜百度推广收费
  • 所谓做网站就这么几步2023年7月疫情爆发
  • 赣榆网站制作百度官网网站
  • 兰州网站建设推广报价如何做网站平台
  • 义乌的论坛网站建设十大骗子教育培训机构
  • wordpress ajax json上海做seo的公司
  • 建网站的公司软件推广赚钱一个10元
  • pc下载网安卓优化大师下载安装
  • 国外网站设计网站seo兼职接单平台
  • 自己怎么做商城网站宁波seo外包推广渠道
  • 小说网站上的广告在哪做百度免费发布信息
  • 山海经异变小程序游戏入口seo常见的优化技术
  • 哪个网站可以做医学基础知识题如何搭建自己的网站
  • 网站开发如何引用函数如何去推广自己的产品
  • 做网站和做app哪个容易数据分析培训机构哪家好
  • dede企业网站带留言板后台查询最新推广赚钱的app
  • 建设通相似的网站百度地图网页版进入