Django REST Framework(二)Django的CBV

之前我们用的Django的视图函数叫FBV(也就是函数型视图函数),这里我们来试试CBV(类视图函数)的写法。类视图函数可以让代码看起来更简洁,用起来更方便。

CBV的简单使用

  • 视图类

    python 复制代码
    class BookView(View):
    
        def get(self, request):
            return HttpResponse("get请求book")
    
        def post(self, request):
            return HttpResponse("post请求book")
  • 路由:

    python 复制代码
    urlpatterns = [
        path('book/', views.BookView.as_view()),
    ]
  • postman测试get请求:

  • postman测试post请求:

CBV的源码解析

复制代码
##### 继承

```python
class Animal(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.sleep()  # 一定要明确self是谁

    def sleep(self):
        print("sleeping...")


class Dog(Animal):

    def wangwang(self):
        print("旺旺叫")

    def sleep(self):
        print("仰天睡...")


d = Dog("alex", 23)
```
复制代码
##### 反射

```python
class Animal(object):

    def __init__(self, name, age, init_func_str):
        self.name = name
        self.age = age

        func = getattr(self, init_func_str)
        func()

    def sleep(self):
        print("sleeping...")

class Dog(Animal):

    def wangwang(self):
        print("旺旺叫")

    def sleep(self):
        print("仰天睡...")


d = Dog("alex", 23, "sleep")
```
复制代码
#### CBV的源码解析

```python
''''
class BookView(View):

    def get(self, request):
        return HttpResponse("get请求book")

    def post(self, request):
        return HttpResponse("post请求book")
        
        
class View:
        @classonlymethod
        def as_view(cls):
    
            def view(request):
                self = cls()
                return self.dispatch(request, *args, **kwargs)
                
            return view
            
      def dispatch(self, request):
        
            handler = getattr(self, request.method.lower()) # 按请求方式分发       
            return handler(request, *args, **kwargs)

# 路由
path('book/', views.BookView.as_view()),
path('book/', View.view),

# 一旦用户发起请求,比如get请求访问/book/,得到的是get方法的响应结果

get请求访问/book/  =>  view()  =>   dispatch()  =>  get()  
''''
```
相关推荐
人间凡尔赛7 分钟前
2026 云原生“后容器时代“:WebAssembly 如何重构后端架构?
后端·云原生·架构
IT_陈寒11 分钟前
React的useEffect依赖数组把我坑惨了,原来这样写才靠谱
前端·人工智能·后端
Wesleyblue13 分钟前
python计算余弦相似性和汉明距离
python·余弦相似性·汉明距离·二进制编码·数值向量
Patrick在香港29 分钟前
Python依赖管理从踩坑到选型:pip/poetry/uv四种方案全面实测
开发语言·python·数据分析·scikit-learn·ai编程·pip·uv
木易 士心33 分钟前
服务器构建指南:从选型、部署到高可用架构详解
运维·服务器·后端·架构
circuitsosk1 小时前
知识问答领域大语言模型设计:对标豆包与DeepSeek的工程实践
人工智能·python·语言模型·自然语言处理·llm·豆包·deepseek
卷无止境1 小时前
从源码到货架:拆解 Python 打包发布的核心逻辑
后端·python
mldong1 小时前
为什么在 Flowable 时代还要写一个轻量工作流引擎
后端
这就是佬们吗1 小时前
企业Agent落地为什么需要RAG?
人工智能·python·fastapi
AI视觉网奇1 小时前
glb读取颜色
开发语言·python