目录

  • 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属性,它会自动使用相应的类方法。

Flask入门(4):CBV和FBV相关推荐

  1. flask中的CBV和FBV

    flask中CBV使用 from flask import Flask, viewsapp = Flask(__name__)class Login(views.MethodView):methods ...

  2. 视图层详解,cbv和fbv,文件上传

    day64 一.复习 二.视图层之请求对象 三.视图层之响应对象 补充知识之json序列化与反序列化 四.cbv和fbv 五.文件上传 六.postman软件 七.form表单,提交地址 八.Pych ...

  3. Flask中的CBV

    Flask中的CBV 在Flask中和Django一样有两种视图模式,一种是基于函数,一种是基于类.下面来讨论一下Flask的CBV模式. 首先,说明一下flask视图函数注册路由的本质: 其实,ro ...

  4. Flask入门之Jinjia模板的一些语法

    原文:https://www.cnblogs.com/wongbingming/p/6807771.html Flask入门之Jinjia模板的一些语法 1. 变量表示 {{ argv }} 2. 赋 ...

  5. Flask入门之Virtualvenv的安装及使用(windows)

    转自 https://www.cnblogs.com/wongbingming/p/6795455.html(Flask入门之Virtualvenv的安装及使用(windows)) Virtualve ...

  6. flask中的CBV , flask-session在redis中存储session , WTForms数据验证 , 偏函数 , 对象里的一些小知识...

    flask中的CBV , flask-session在redis中存储session , WTForms数据验证 , 偏函数 , 对象里的一些小知识 flask中的CBV写法 后端代码 # 导入vie ...

  7. Flask入门系列(转载)

    一.入门系列: Flask入门系列(一)–Hello World 项目开发中,经常要写一些小系统来辅助,比如监控系统,配置系统等等.用传统的Java写,太笨重了,连PHP都嫌麻烦.一直在寻找一个轻量级 ...

  8. Flask入门之上传文件到服务器

    https://www.cnblogs.com/wongbingming/p/6802660.html flask 文件的上传下载和excel操作 Flask入门之上传文件到服务器 今天要做一个简单的 ...

  9. Flask入门之上传文件到本地服务器

    Flask入门之上传文件到服务器 今天要做一个简单的页面,可以实现将文件 上传到服务器(保存在指定文件夹) #Sample.py 1 # coding:utf-8 2 3 from flask imp ...

最新文章

  1. 【初学者指南】在ASP.NET MVC 5中创建GridView
  2. php无极分类非递归_无限极分类算法,对你一定有帮助
  3. 从LINQ开始之LINQ to Objects(上)
  4. InfluxDB 开源分布式时序、事件和指标数据库
  5. AI公开课:19.02.20 雷鸣教授《人工智能革命与机遇》课堂笔记以及个人感悟
  6. 【转】匈牙利命名法(Hungarian Notation)
  7. 单片机串行收发电路制作记录
  8. 【转】Magento2 数据库操作
  9. php 判断wap,php判断是否wap手机客户端的方法详解
  10. HTML打开网页拒绝访问,WindowsApps无法访问怎么解决?
  11. 00后没玩过的电脑编程游戏
  12. 【OpenCV】透视变换 Perspective Transformation
  13. Codeforces 396C
  14. WordPiece 和 BPE 的区别
  15. 功不唐捐 玉汝于成---贪心算法终结
  16. CM3启动汇编文件详解
  17. 【机械仿真】基于matlab打桩机运动学仿真【含Matlab源码 2101期】
  18. 京东商城空调标价0元引发抢购
  19. fhkldlkfhj
  20. reverse 函数讲解

热门文章

  1. Quick Power
  2. Nginx配置项优化详解
  3. Linux--连接MySQL出现1045错误 解决方法
  4. 关于vue 动态引入(异步加载import和require)组件的方法和坑(按需懒加载组件,动态生成路由)babel-plugin-dynamic-import-node 优化编译速度
  5. Linux内核是什么?Linux内核是怎么工作的?
  6. App Inventor 2 题库设计制作流程
  7. 如何查看域控计算机是哪个用户登陆,查看域控制器上登录用户
  8. 基于STM32单片机的直流电机控制系统加减速正反转设计方案原理图程序
  9. 2022软件测试工程师的简历怎么写?
  10. 浅析计算机信息管理系统任务书,计算机工程系学生就业信息管理系统任务书