前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Django REST 框架的 FBV 与 CBV 选择

Django REST 框架的 FBV 与 CBV 选择

作者头像
白墨石
发布于 2021-01-12 01:58:52
发布于 2021-01-12 01:58:52
1.3K00
代码可运行
举报
文章被收录于专栏:生信情报站生信情报站
运行总次数:0
代码可运行

文章目录

    • 一、什么是 FBV与CBV
        • FBV: function base view
        • CBV: class base view
    • 二、CBV 实现原理:反射
    • 三、CBV 面向对象
        • 1.封装
        • 2.继承
    • 四、Django 中间件方法与流程

一、什么是 FBV与CBV

FBV: function base view

views.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.shortcuts import render,HttpResponse
import json

def users(request):    
    user_list = {
        "name": "tom",
        "age":27
    }
    return HttpResponse(json.dumps(user_list))

urls.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.contrib import admin
from django.urls import path
from tutorial01 import views

urlpatterns = [
    path('users',views.users),
    path('admin/', admin.site.urls),
]
CBV: class base view

推荐使用CBV

views.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.shortcuts import render,HttpResponse
from django.views import View


class UsersView(View):
    # 如何知道数据传输方法?
    # 通过反射实现
    # getattr(obj, request.method)
    
    def get(self, request, *args, **kwargs):
        return HttpResponse("GET")

    def post(self, request, *args, **kwargs):
        return HttpResponse("POST")

urls.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.contrib import admin
from django.urls import path
from tutorial01 import views

urlpatterns = [
    path('users',views.UsersView.as_view()),
    path('admin/', admin.site.urls),
]

二、CBV 实现原理:反射

反射机制就是在运行时,动态的确定对象的类型,并可以通过字符串调用对象属性、方法、导入模块,是一种基于字符串的事件驱动。 在python中支持反射机制的函数有getattr()、setattr()、delattr()、exec()、eval()、__import__

CBV 基于反射来根据请求方式不同,执行不同方法

ChildView 子类继承 View 父类后,

浏览器通过url传给路由,由as_view 进入ChildView,ChildView通过View的 dispatch 方法来根据不同请求方法执行不同的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class View:
    # ...
    def dispatch(self, request, *args, **kwargs):
        # Try to dispatch to the right method; if a method doesn't exist,
        # defer to the error handler. Also defer to the error handler if the
        # request method isn't on the approved list.
        if request.method.lower() in self.http_method_names:
            # 通过 getattr 实现反射机制
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)

三、CBV 面向对象

1.封装
2.继承

避免重复编写共用的功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyBaseView(object):
    def dispatch(self, request, *args, **kwargs):
        print('before')
        # 执行父类的 dispatch 方法
        # super 除了可以让子类继承父类的方法,同时还可以执行子类的其他父类的 方法
        ret = super(MyBaseView, self).dispatch(request, *args, **kwargs)
        print('after')
        return ret


# 继承时,前面的类优先级高
class UsersView(MyBaseView, View):
    def get(self, request, *args, **kwargs):
        print('get')
        return HttpResponse("GET")

    def post(self, request, *args, **kwargs):
        return HttpResponse("POST")

输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Quit the server with CTRL-BREAK.
before
get
after

四、Django 中间件方法与流程

中间件负责把各个模块将客户端请求经过路由匹配和视图处理返回给客户端

包括五个方法

  • process_request
  • process_response
  • process_view
  • process_exception
  • process_render_template

执行流程

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
biztalk 2010 dev版安装小记
曾经以为TFS是微软产品中比较难安装的产品了,当我接触biztalk之后,我承认:我错了! 安装准备: 一、网络环境 要能联网,且速度不能太慢(安装过程中会根据本机情况联机下载一些必备组件) 二、硬件环境 至少双核CPU,C盘空间搞大点(建议不低于60G,我是预留了80G),内存4G以上(最低不少于2G,不然安装的时候等得不耐烦想撞墙时,别说我没提醒你) 三、软件环境 1、安装windows 2008 R2(最好准备一个干净的系统) 2、安装IIS (注:iis安装完以后的默认站点,千万别删除,配置BAM时
菩提树下的杨过
2018/01/22
8910
biztalk 2010 dev版安装小记
VS2008连接CodePlex的源代码管理服务
为了更有效的分享部门的.NET代码,我们决定把一些通用的组件源代码通过CodePlex来托管。CodePlex是MS提供的一个第三方源代码托管服务和开源项目管理网站,只要注册了CodePlex用户或者
用户1177503
2018/02/27
9980
Windows Server 2008 R2 网络负载平衡 (NLB)资料汇总
Windows Server 2008 R2 中的网络负载平衡 (NLB) 功能可以增强 Internet 服务器应用程序 [如在 Web、FTP、防火墙、代理、虚拟专用网络 (VPN) 以及其他执行关键任务的服务器上使用的应用程序] 的可用性和可伸缩性。运行 Windows Server 2008 R2 的单个计算机提供有限的服务器可靠性和可伸缩性能。但是,通过将运行 Windows Server 2008 R2 的其中一个产品的两台或多台计算机的资源组合到单个虚拟群集中,NLB 便可以提供 Web 服务
张善友
2018/01/19
1.1K0
OpenXML 成为 ECMA标准 376
开放式的OpenXML文件格式一直广为关注,昨天一份最终版的格式定义文档在Ecma-International's上出现,这是一个里程碑式的文档,标志着Office的文档格式定型,这里提供资料链接,开发员朋友们请关注.微软于去年向位于日内瓦的业内组织欧洲计算机制造商协会(Ecma International)提出申请,请求批准Open XML为国际通用标准。昨天,欧洲计算机制造商协会宣布,正式批准Open XML为国际通用标准。具体参看Ecma International approves Office O
张善友
2018/01/22
9330
WPF E 文章汇总
MSDN "WPF/E" (codename) Dev Center : http://msdn2.microsoft.com/en-us/asp.net/bb187358.aspx 对网上的WPF/E 文章汇总,前一部分来自思归的WPF/E技术文章,每天整理一些资源. 1。WPF/E 起步 -- Getting Started with "WPF/E" (Code Name) http://msdn2.microsoft.com/en-us/library/bb190632.aspx 讨论了WPF
张善友
2018/01/26
8320
Windows 7 远程服务器管理工具
通过 Windows 7 远程服务器管理工具,IT 管理员可以从运行 Windows 7 的远程计算机上管理安装在运行 Windows Server 2008 R2 的远程计算机上的角色和功能(以及运行 Windows Server 2008 或 Windows Server 2003 的远程计算机上的某些角色和功能)。它支持对运行 Windows Server 2008 R2(使用服务器核心安装或完全安装选项所安装)的计算机进行远程管理,还支持 Windows Server 2008 上的某些角色和功能。
张善友
2018/01/31
7.5K0
Silverlight 3.0 RTM资源
2009年7月11日消息,微软正式发布Silverlight 3,其中在6大方面功能做了改善。 1、平滑视频流技术,也就是H.264编解码器:微软表示其新视频流功能提高了浏览器上的视频质量,已经可以和电视视频相比。 2、数字版权管理:Silverlight 3在数字内容保护上做了提高。内容生产商从发布内容之始就可以跟踪并保护其发布的内容。 3、现场感:Silverlight 3支持更强大的3D显示功能,GPU的硬件支持,新增加的一些功能可以用于图片的深度缩放,现场感更强。 4、可在浏览器之外运行:在2007
张善友
2018/01/29
5180
Visual Studio 2008英文正式版已经发布在MSDN
今天登陆MSDN发现Visual Studio 2008英文正式版已经发布,MSDN订阅者已经可以下载.这次公布的Visual Studio 2008包括所有Team版本,方便开发人员为Windows
张善友
2018/01/31
9620
Visual Studio 2008英文正式版已经发布在MSDN
微软大力支持开放数据协议(OData)
InfoQ有篇文章OData是应用程序协作的通用语言吗?,文章中提到了什么是OData:开放数据协议(OData)是一个查询和更新数据的Web协议。OData应用了web技术如HTTP、Atom发布协议(AtomPub)和JSON等来提供对不同应用程序,服务和存储的信息访问。 文章还提到了微软在开放数据协议OData上的应用,也提到了google采用的Google的数据交换协议:GData (Google Data APIs Protocol),微软在Azure平台上引入了开发代号名为“Dallas”的服务
张善友
2018/01/31
1.3K0
SharePoint Foundation 2010
下图是一张SharePoint 2010基本架构图,它简要的描述出了SharePoint 2010的基本结构。SharePoint Foundation在之前的版本中,被称为Windows Share
张善友
2018/01/22
1K0
SharePoint Foundation 2010
IP-guard V3 安装指南
1.数据库的安装 [版本要求] 数据库使用SQL Server 2000 SP4或SQL Server 2005 SP1或以上版本,如果没有SQL Server可以安装微软提供的免费的MSDE S
py3study
2020/01/08
1.9K0
Windows Server AppFabric安装与步署[通俗易懂]
Windows Server AppFabric正式版已经发布。今天测试一下,把域环境中安装遇到的问题告诉大家,只针对缓存服务这一块,希望大家少走一些弯路。
全栈程序员站长
2022/11/07
1.3K0
AppFabric 版本区分
1, WindowsServerAppFabricSetup_x64_6.1.exe, 2010/12/3 发布的, 不推荐使用,Win10安装后IIS启动失败,
全栈程序员站长
2022/11/03
8990
Silverlight 2 开发环境
第一步安装 Visual Studio 2008 with SP1,这是主要的Silverlight 2 开发环境,可以选择Visual Web Developer 2008 Express Edition with Service Pack 1,它是一个免费的开发工具。 第二步安装SQL Server 2005/2008 Express,这是一个用来开发用的数据库环境,同样也是免费的。 第三步下载安装Microsoft® Silverlight™ Tools for Visual Studio 2008
张善友
2018/01/30
5370
配置SQL Server 2005 Express的Windows和SQL Server身份验证
如何安装SQL Server 2005 Express、SQL Server Management Studio Express,以及配置SQL Server 2005 Express的身份验证方式,启用sa登录名。
阳光岛主
2019/02/19
1.9K0
Microsoft .NET Framework 3.5中文组件包
.NET Framework 3.0 中增加了不少新功能,例如 Windows Workflow Foundation (WF)、Windows Communication Foundation (WCF)、Windows Presentation Foundation (WPF) 和 Windows CardSpace,.NET Framework 3.5 在这些新增功能的基础上增量构建而成。此外,.NET Framework 3.5 还包含若干技术领域中的大量新功能,它们以新程序集的形式添加,以避免重大
张善友
2018/01/31
1.2K0
VI3之vCenterServer配置的
        在Vmware Infrastruacture 3中,vCenter Server起到非常重要的角色。在VMware给出的一些解决方案中,常见的是针对Esx主机高用性的VMware HA等的解决方案,但好像并没有提到如何备份和恢复vCenter Server配置的解决方案。
py3study
2020/01/08
8170
微软推出SQL Server 2005 Report Packs
微软推出八个SQL Server 2005 报表类型,包括了: SQL Server 2005 Report Pack for SQL Server Integration Services Download this set of five predefined reports and a sample database to easily visualize, filter, analyze, and organize Log and Error row data generated by SQL S
张善友
2018/01/29
6290
Silverlight 2 Beta 1学习资源
Silverlight 2 Beta 1发布了,大家都介绍了怎么去下载安装了,晚上整理了一些资料放上来和大家共享: 1、Silverlight 2 Beta 1 控件代码以及单元测试,这是学习设计一个
张善友
2018/01/30
1.2K0
转帖--Windows Phone 7开发环境搭建
下文转自WPmind:Windows Phone 7开发环境搭建     在6月22日我们WPMind组织的Windows Phone 7开发技术线上活动结束后,不少朋友纷纷问道如何搭建Windows Phone 7的开发环境。其实Windows Phone 7的开发环境相比Windows Mobile 6.x的系列来说要简单许多了。     1. 如果您是一个开发人员,您希望使用Silverlight for Windows Phone开发Windows Phone 7上的应用软件,或者是使用XNA Ga
ShiJiong
2018/01/10
7440
相关推荐
biztalk 2010 dev版安装小记
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文