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()  
''''
```
相关推荐
Dmz丶13 分钟前
前端转 AI 100 天 Day 36:Prompt 工程入门——从“感觉对了就行”到方法论
python
拖孩20 分钟前
流量主门槛从 500 降到 100,我的小程序上线 18 小时够到了线
前端·后端·微信小程序
养军博客28 分钟前
Spring Security 4.x / 5.x / 6.x 配置全对比:前后端不分离与前后端分离
java·后端·spring·springsecurity
wifi___29 分钟前
SpringBoot自动装配原理
java·spring boot·后端
日日大王学编程31 分钟前
AI 时代后端方向新人的未来规划与看法
人工智能·后端·python·ai·golang
Fox爱分享1 小时前
都问程序员双十一买什么,我的答案一定是这块专业编程显示器
后端·程序员·ai编程
CCblandy1 小时前
缓存淘汰实测:一次全表扫描把 LRU 命中率从 46% 打到 38%,W-TinyLFU 守住 50% 却贵 11 倍
后端·python·缓存·性能优化·架构
汤米粥1 小时前
cmd手动创建的Django项目怎么用社区版Pycharm运行起来
python·pycharm·django
武子康1 小时前
DOA 100%、GSC 改善 12 dB,ESP32-P4 远场拾音就能用了吗?
人工智能·后端·agent
涵玥1 小时前
python题目练习12-小玉家的电费//小玉在游泳//小鱼的航程
python·python每日一练·洛谷题目