首页 > 其他分享 >flask之cbv写法

flask之cbv写法

时间:2024-10-31 11:33:27浏览次数:4  
标签:return get flask data jsonify request cbv 写法 view

一、CBV介绍

1、class-based views, CBVs

通常使用函数视图(function-based views, FBVs)来定义路由和处理逻辑。不过,Flask 也支持基于类的视图(class-based views, CBVs),这可以帮助在需要共享逻辑或管理复杂视图结构时组织代码。

基于类的视图 CBV 的特点

  • 组织性:CBV 方式可以更好地组织和重用代码,尤其适用于复杂的视图逻辑。
  • 可继承性:可以通过类继承的方式实现逻辑的共享和复用。
  • 封装性:通过类的方法封装不同的 HTTP 请求方法(如 GET、POST、PUT 等)逻辑。

2、基本用法

在 Flask 中使用 CBV 的基本方式是通过继承 flask.views.MethodView

from flask import Flask, request, jsonify, url_for
from flask.views import MethodView

app = Flask(__name__)


class MyView(MethodView):
    def get(self):
        return jsonify({"message": "This is a GET request"})

    def post(self):
        data = request.get_json()
        print(url_for("my_view"))
        return jsonify({"message": "This is a POST request", "data": data})


# 注册路由,绑定视图类
app.add_url_rule('/myview', view_func=MyView.as_view('my_view'))

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

补充:

指定方法名称

在基于类的视图中,HTTP 方法名 getpostdelete 应该直接作为方法名。Flask 自动根据请求的 HTTP 方法调用相应的类方法。因此,需要定义 getpostdelete 方法,而不是 mesg1mesg2 等自定义方法名称。

也可以显式声明 methods 属性, 如果显式声明了,不在声明中的方法将不被允许

class MyView(MethodView):
    methods = ['get', 'post']

    def get(self):
        return jsonify({"message": "This is a GET request"})

    def post(self):
        data = request.get_json()
        print(url_for("my_view"))
        return jsonify({"message": "This is a POST request", "data": data})

3、路由的别名 view_func=MyView.as_view 

    def post(self):
        data = request.get_json()
        print(url_for("my_view"))
        return jsonify({"message": "This is a POST request", "data": data})

通过url_for反向解析路由,MyView.as_view 括号中的内容my_view 是myview的别名

即myview怎么修改name,都可以通过别名my_view 去解析到

4、cbv加装饰器

# 定义一个简单的认证装饰器
def api_key_required(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if request.headers.get("API-Key") != "my-secret-key":
            return jsonify({"error": "Unauthorized"}), 401
        return f(*args, **kwargs)

    return decorated_function


# 全局装饰器,decorators = [xxx]
class MyView(MethodView):
    decorators = [api_key_required]

    def get(self):
        return jsonify({"message": "This is a GET request"})

    def post(self):
        data = request.get_json()
        return jsonify({"message": "This is a POST request", "data": data})

# 局部装饰 写在类中方法上
class MyView(MethodView):
    def get(self):
        return jsonify({"message": "This is a GET request"})

    @api_key_required
    def post(self):
        data = request.get_json()
        return jsonify({"message": "This is a POST request", "data": data})

  

 

二、

标签:return,get,flask,data,jsonify,request,cbv,写法,view
From: https://www.cnblogs.com/dgp-zjz/p/18517361

相关文章

  • 网络安全渗透测试写法
    xss谝:CSP:设置白名单,只允许特定来源的脚本和资源加载,阻止不在白名单中的脚本执行Content-Security-Policy:default-src'self';script-src'self';style-src'self';img-src'self'data:;XSS保护头X-XSS-Protection:1;mode=blockphp中使用htmlspecialc......
  • python+flask计算机毕业设计高校统战大数据云平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于高校统战大数据云平台的研究,现有研究多集中于一般的大数据云平台在高校管理中的应用,专门针对高校统战工作构建大数据云平台的研究......
  • flask算pin
    pin码是flask在开启debug模式下,进行代码调试模式所需的进入密码,需要正确的PIN码才能进入调试模式.对于pin码运算方法的描述如下pin码生成要六要素1.username在可以任意文件读的条件下读/etc/passwd进行猜测2.modname默认flask.app3.appname默认Flask4.moddirflask库......
  • 【Python原创毕设|课设】基于Python Flask IT行业招聘可视化分析系统-文末附下载方式,
    基于PythonFlask物流行业招聘可视化分析系统(获取方式访问文末官网)一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、数据库设计七、功能实现八、源码获取一、项目简介本系统是一款基于PythonFlask的IT行业招聘可视化分析平台,旨在为行业用户提供......
  • python+flask框架的基于微信小程序的校园跑腿系统服务端视频8(开题+程序+论文) 计算机
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的快速发展,微信小程序作为一种轻量级的应用形式,已广泛应用于各类服务场景。在校园环境中,学生对于便捷生活服务的需求日......
  • python+flask框架的基于微信小程序的校园互助平台服务端视频8(开题+程序+论文) 计算机
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的飞速发展,微信小程序作为一种轻量级的应用形式,已经深入到人们生活的方方面面。在校园环境中,学生之间经常存在各种互助......
  • python+flask框架的基于微信小程序的校园跳蚤市场管理系统的设计与实现服务端视频8(开
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的快速发展,微信小程序作为一种轻量级的应用形式,在校园生活中的应用日益广泛。校园跳蚤市场作为学生二手物品交易的重要......
  • 基于深度学习+pytorch+Flask+SpringBoot+Vue+MySQL的水果识别系统
    目录前言1.登陆注册2.水果识别3.识别记录4.用户管理5.个人中心6.模型训练7.模型测试源码获取前言本系统是一个完整的基于深度学习+pytorch+Flask+SpringBoot+Vue+MySQL的水果识别系统。包括LeNet、AlexNet、VGG、GoogLeNet、ResNet、MobileNetV2网络模型。可以直接......
  • 基于深度学习+pytorch+Flask+SpringBoot+Vue+MySQL的动物识别系统
    目录前言1.登陆注册2.动物识别3.识别记录4.用户管理5.个人中心6.模型训练7.模型测试源码获取前言本系统是一个完整的基于深度学习+pytorch+Flask+SpringBoot+Vue+MySQL的动物识别系统。包括LeNet、AlexNet、VGG、GoogLeNet、ResNet、MobileNetV2网络模型。可以直接......
  • python+flask框架的基于微信小程序的考勤出勤管理系统(开题+程序+论文) 计算机毕业设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于考勤出勤管理系统的研究,现有研究主要以传统企业考勤系统、高校教务管理系统中的考勤模块为主,这些系统多采用PC端或专用的考勤设备,虽然......