Flask入门(4):CBV和FBV

4.CBV和FBV

前面的例子中,都是基于视图函数构建视图(FBV),和Django一样,Flask也有基于类构建视图(CBV)的方法。这种方式用的不多,可了解。

由于视图类本身不是添加到路由系统的视图函数,真正的视图函数是类的as_view()的返回值。并且手动使用app.add_url_rule()函数添加路由。

视图类中主要有两个常用的属性:

  • methods:表明可接受的请求方法,是个列表,可选多个;
  • decorators:表明需要加在这个类的视图函数上的装饰器,是个列表,可选多个;

CBV有如下两种方式:

4.1 继承 views.View

继承 views.View。在dispatch_request函数中写具体的处理逻辑,不同的请求方法需要判断。

# CBV示例
from flask import Flask, views
import functools

app = Flask(__name__)


def wapper(func):
    @functools.wraps(func)
    def inner(*args, **kwargs):
        print("inner")
        return func(*args, **kwargs)
    return inner


class IndexView(views.View):
    methods = ['GET', 'PUT']
    # 添加装饰器,加载这个类下的方法上
    decorators = [wapper, ]

    def dispatch_request(self):
      	if request.method == 'GET':
        		print('GET Index')
            return 'Index'
        else if request.method == 'PUT':
          	print('PUT Index')
          	return 'Index'

app.add_url_rule('/index', view_func=IndexView.as_view(name='index'))  # name是endpoint


if __name__ == '__main__':
    app.run()

4.2 继承 views.MethodView

每个 HTTP 方法都映射到一个同名的类方法(名称为小写字母),可以完成反射。

# CBV示例
from flask import Flask, views
import functools

app = Flask(__name__)


def wapper(func):
    @functools.wraps(func)
    def inner(*args, **kwargs):
        print("inner")
        return func(*args, **kwargs)
    return inner


class IndexView(views.MethodView):
    methods = ['GET', 'POST']
    # 添加装饰器,加载这个类下的方法上
    decorators = [wapper, ]

    def get(self):
        print('get 请求')
        return 'get'

    def post(self):
        print('post 请求')
        return 'post'

app.add_url_rule('/index', view_func=IndexView.as_view(name='index'))  # name是endpoint

if __name__ == '__main__':
    app.run()

使用这种方式,也可不提供 methods属性,它会自动使用相应的类方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan-running

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值