Django的FBV和CBV

news/2024/11/24 2:50:04/

Django的FBV和CBV

基于django开发项目时,对于视图可以使用 FBV 和 CBV 两种模式编写。

  • FBV,function base views,其实就是编写函数来处理业务请求。

    from django.contrib import admin
    from django.urls import path
    from app01 import views
    urlpatterns = [path('users/', views.users),
    ]
    
    from django.http import JsonResponsedef users(request,*args, **kwargs):if request.method == "GET":return JsonResponse({"code":1000,"data":"xxx"})elif request.method == 'POST':return JsonResponse({"code":1000,"data":"xxx"})...
    
  • CBV,class base views,其实就是编写类来处理业务请求。

    from django.contrib import admin
    from django.urls import path
    from app01 import views
    urlpatterns = [path('users/', views.UserView.as_view()),
    ]
    
    from django.views import Viewclass UserView(View):def get(self, request, *args, **kwargs):return JsonResponse({"code": 1000, "data": "xxx"})def post(self, request, *args, **kwargs):return JsonResponse({"code": 1000, "data": "xxx"})
    

其实,CBV和FBV的底层实现本质上相同的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BRYWjXoN-1691020686220)(assets/image-20210819114755157.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uTin1A4e-1691020686221)(assets/image-20210819115517407.png)]

CBV,其实就是在FBV的基础上进行的功能的扩展,根据请求的方式不同,直接定位到不同的函数中去执行。

如果是基于django编写restful API,很显然使用CBV的方式会更加简洁,因为restful规范中就是根据method不同来执行不同操作。

基于django的CBV和restful规范开发实战案例:

# urls.pyfrom django.urls import path
from app01 import viewsurlpatterns = [# http://www.xxx.com/api/v1/users/path('api/<str:version>/users/', views.UserView.as_view()),# http://www.xxx.com/api/v1/users/2/path('api/<str:version>/users/<int:pk>/', views.UserView.as_view()),]
# views.pyfrom django.views import View
from django.http import JsonResponseclass UserView(View):def get(self, request, version, pk=None):if not pk:# 请求用户列表info = {"code": 0,"data": [{"id": 1, "name": "武沛齐"},{"id": 1, "name": "武沛齐"},]}return JsonResponse(info)else:# 获取ID=pk的用户信息,并返回info = {"code": 0,"data": {"id": 1, "name": "武沛齐"}}return JsonResponse(info)def post(self, request, version):# 新增用户,读取 request.POST 中提交的数据并添加到数据库中info = {"code": 0,"data": {"id": 1, "name": "武沛齐"}}return JsonResponse(info)def delete(self, request, version, pk):# 删除id=pk的用户info = {"code": 0,"data": {}}return JsonResponse(info)def put(self, request, version, pk):# 读取request.POST中的数据 + pk,更新数据库中的用户信息info = {"code": 0,"data": {"id": 1, "name": "武沛齐"}}return JsonResponse(info)def patch(self, request, version, pk):# 读取request.POST中的数据 + pk,更新数据库中的用户信息info = {"code": 0,"data": {"id": 1, "name": "武沛齐"}}return JsonResponse(info)

从上面的示例看来,基于django框架完全可以开发restful API。

django restframework框架 是在django的基础上又给我们提供了很多方便的功能,让我们可以更便捷基于django开发restful API,来一个简单的实例,快速了解下:

  • 基于django

  • 基于django + django restframework框架


http://www.ppmy.cn/news/1003715.html

相关文章

Python: Django 服务部署可能遇到的一些问题

502 bad gateway 不要用 python3 manage.py runserver 启动服务&#xff0c; 而要用&#xff1a; daphne -b 0.0.0.0 -p <端口> <工程名>.asgi:application此外&#xff0c;在 setting.py 中&#xff0c;修改&#xff1a; import osSECRET_KEY os.environ.get(D…

kafka权威指南(阅读摘录)

零复制 Kafka 使用零复制技术向客户端发送消息——也就是说&#xff0c;Kafka 直接把消息从文件&#xff08;或者更确切地说是 Linux 文件系统缓存&#xff09;里发送到网络通道&#xff0c;而不需要经过任何中间缓冲区。这是 Kafka 与其他大部分数据库系统不一样的地方&#…

详解使用SSH远程连接Ubuntu服务器系统

演示环境&#xff1a; 1.Windows10系统 2.VMware Workstation Pro虚拟机 2.Ubuntu16.04.6&#xff08;以上版本通用&#xff09; 回归正题 一、在Ubuntu端&#xff1a; 1.首先需要安装SSH服务器&#xff0c;在ubuntu终端输入以下指令 sudo apt-get install ssh2.输入你的ubu…

数据标注对新零售的意义及人工智能在新零售领域的应用?

数据标签对于新零售至关重要&#xff0c;因为它构成了训练和部署人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;模型的基础。在新零售的背景下&#xff0c;数据标签涉及对数据进行分类、标记或注释以使其能够被机器理解的过程。然后&#xff0c;这些…

C++、python双语言弹窗教程与对比

Messagebox弹窗 MessageBox指的是显示一个模态对话框&#xff0c;其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息&#xff0c;如状态或错误的信息。消息框中返回一个整数值&#xff0c;该值指示用户单击了哪个按钮。 例子&#xff1a; 本文介绍了用C、Pytho…

浅谈Vue3 computed计算属性

什么是computed 官方给出的解释&#xff1a;接受一个 getter 函数&#xff0c;返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 get 和 set 函数的对象来创建一个可写的 ref 对象 // 只读 function computed<T>(ge…

InterProcessMutex 类的作用和使用

InterProcessMutex 类是Curator框架中的一个分布式锁的实现&#xff0c;用于在分布式环境下实现互斥锁。 InterProcessMutex 的使用步骤如下&#xff1a; 创建 CuratorFramework 客户端实例&#xff0c;并启动客户端连接到 ZooKeeper 服务器。使用 CuratorFramework 的 creat…

【若依管理系统】开发功能流程总结

1.在菜单管理中&#xff0c;新增需要创建的菜单&#xff0c;如图 并添加查询、新增、修改、删除等按钮和对应的权限和路径 例如如果没有添加查询按钮&#xff0c;那么在修改的时候&#xff0c;会存在报错&#xff1a;没有权限。上图对应后台代码 2.domain中创建设计的表结构及操…