当前位置: 首页 > news >正文

Flask入门(4):CBV和FBV

目录

  • 4.CBV和FBV
    • 4.1 继承 views.View
    • 4.2 继承 views.MethodView

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 functoolsapp = Flask(__name__)def wapper(func):@functools.wraps(func)def inner(*args, **kwargs):print("inner")return func(*args, **kwargs)return innerclass 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是endpointif __name__ == '__main__':app.run()

4.2 继承 views.MethodView

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

# CBV示例
from flask import Flask, views
import functoolsapp = Flask(__name__)def wapper(func):@functools.wraps(func)def inner(*args, **kwargs):print("inner")return func(*args, **kwargs)return innerclass 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是endpointif __name__ == '__main__':app.run()

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

http://www.lryc.cn/news/5323.html

相关文章:

  • Qt OpenGL(三十九)——Qt OpenGL 核心模式-在雷达坐标系中绘制飞行的飞机
  • 系统应用 odex 转 dex
  • 【GPLT 三阶题目集】L3-013 非常弹的球
  • vue项目第三天
  • 【渝偲医药】实验室关于核磁共振波谱NMR的知识(原理、用途、分析、问题)
  • 教你文本生成图片——stablediffusion
  • C语言学习笔记-命令行参数
  • ASEMI代理FGH60N60,安森美FGH60N60车规级IGBT
  • http409报错原因
  • 设计模式:适配器模式(c++实现案例)
  • Python|每日一练|数组|回溯|哈希表|全排列|单选记录:全排列 II|插入区间|存在重复元素
  • Linux进程状态
  • 大数据第一轮复习笔记
  • HTML面试题
  • CUDA内存管理一文理清|参加CUDA线上训练营
  • Transformation(转换算子)
  • 总结如何设计一款营销低代码可视化海报平台
  • spark04-文件读取分区数据分配原理
  • 常见的网络安全攻击及防御技术概述
  • NetSuite Balancing Segment平衡段
  • Docker 中遇到的问题
  • 树莓派用默认账号和密码登录不上怎么办;修改树莓派的密码
  • 【LeetCode】不同的二叉搜索树 [M](卡特兰数)
  • 【软件相关】文献管理工具——Zotero
  • leetcode练习一:数组(二分查找、双指针、滑动窗口)
  • iPhone更新iOS 16.3出现应用卡死、闪退的问题怎么办?
  • TCP协议原理一
  • 【黑马SpringCloud(6)】Sentinel解决雪崩问题
  • 微信小程序 java springboot招聘求职应聘简历系统
  • 亿级高并发电商项目-- 实战篇 --万达商城项目 四(Dashboard服务、设置统一返回格式与异常处理、Postman测试接口 )