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()  
''''
```
相关推荐
卷毛的技术笔记几秒前
从“拆东墙补西墙”到“最终一致”:分布式事务在Spring Boot/Cloud中的破局之道
java·spring boot·分布式·后端·spring cloud·面试·rocketmq
2401_832365523 分钟前
SQL窗口函数与递归查询的区别_如何根据场景选择
jvm·数据库·python
u0109147604 分钟前
c++如何处理文件路径中由于不规范的连续斜杠导致的路径解析错误【避坑】
jvm·数据库·python
2301_796588506 分钟前
PHP源码开发用二手硬件划算吗_性价比与稳定性权衡【操作】
jvm·数据库·python
2301_775148157 分钟前
如何通过C#读取Oracle数据库中的图片显示到WinForm_BLOB转Byte[]与流处理
jvm·数据库·python
小饕9 分钟前
RAG学习之- RAG 数据导入完整指南
人工智能·python·学习
Ulyanov12 分钟前
《玩转QT Designer Studio:从设计到实战》 QT Designer Studio数据绑定与表达式系统深度解析
开发语言·python·qt
weixin_5689960626 分钟前
mysql如何配置大页内存_mysql large-pages开启方法
jvm·数据库·python
HHHHH1010HHHHH27 分钟前
HTML怎么创建评论区域_HTML嵌套评论语义结构【详解】
jvm·数据库·python
Absurd58728 分钟前
C#怎么模拟键盘按键输入_C#如何实现自动化脚本【教程】
jvm·数据库·python