Flask类视图和RESTful

五、Flask类视图和RESTful

1. Flask-RESTful

I. 基本使用

  • 安装

    sh 复制代码
    pip install flask-restful
  • 创建Resource实现类(通常在App包下的apis.py中)

    python 复制代码
    from flask import jsonify
    from flask_restful import Resource
    
    
    # 类视图 :CBV  class base view
    # 视图函数 :FBV function base view
    
    class HelloResource(Resource):
        def get(self):
            return jsonify({'msg': 'get请求'})
    
        def post(self):
            return jsonify({'msg': 'post请求'})
  • 创建api对象并注册路由

    python 复制代码
    # 方式一:创建并初始化 exts.py
    api = Api(app)
    
    # 方式二:创建之后初始化,在初始化插件中 exts.py
    api = Api()
    api.init_app(app)
    
    # 注册路由  urls.py
    # urls.py 路由文件
    from .apis import *
    from .exts import api
    
    api.add_resource(HelloResource, '/hello/')
    
    # 注意在 __init__.py中需要导入urls.py,否则没有执行路由
    from .urls import *

II. 字段格式化

使用方法:

  • fields进行定义
  • marshal_with进行使用

特性

  • 显示我们设计的数据结构
  • 默认返回的数据如果在预定义结构中不存在,数据会被自动过滤
  • 如果返回的数据在预定义的结构中存在,数据会正常返回
  • 如果返回的数据比预定义结构中的字段少,预定义的字段会呈现一个默认值,未设置默认值,默认为null

使用

  • 定义字段输出fields

    使用字典进行定义

    常用都是基本类型:StringInteger

    python 复制代码
    # 字段格式化:定义返回给前端的数据格式
    ret_fields = {
        'status': fields.Integer,
        'msg': fields.String,
        # 'data': fields.String,  # 不返回data字段
        'like': fields.String(default='ball'),  # 不定义默认值,默认值则为null
        'like2': fields.String,  # 默认值则为null
        'data2': fields.String(attribute='data'),  # 内部属性名为data,返回出去为data2,即使用是data值
    }
  • 定义好的格式通过装饰器进行使用
    @marshal_with(需要返回的数据格式),return返回字典就ok了

    python 复制代码
    class UserResource(Resource):
        @marshal_with(ret_fields)
        def get(self):
            return {
                'status': 1,
                'msg': 'ok',
                'data': 'python'
            }
            
            
  • 级联数据,嵌套字典,Nested

    python 复制代码
    user_fields = {
        # 'id': fields.Integer,
        'name': fields.String,
        'age': fields.Integer,
    }
    ret_fields2 = {
        'status': fields.Integer,
        'msg': fields.String,
        # User对象
        'data': fields.Nested(user_fields)
    }
  • 嵌套列表

    python 复制代码
    user_fields2 = {
        # 'id': fields.Integer,
        'name': fields.String,
        'age': fields.Integer,
    }
    ret_fields3 = {
        'status': fields.Integer,
        'msg': fields.String,
        # User对象
        'data': fields.List(fields.Nested(user_fields2))
    }
  • URL:连接字段

    • 就是将当前数据的操作api暴露出来
    • 根据提供的url和唯一标识进行数据操作
    python 复制代码
    # 格式化字段
    user_fields = {
        'name': fields.String,
        # 路径匹配,在add_resource中也需要设置endpoint='id'
        'url': fields.Url(endpoint='id', absolute=True)
    }
    
    # 在add_resource中提供对应的endpoint
    api.add_resource(UserResource, '/user/', endpoint='id')

III. 参数解析

可以不通过request.formrequest.args获取参数,而是通过reqparse.RequestParser来解析

python 复制代码
# 参数转换器
parser = reqparse.RequestParser()
parser.add_argument('name', type=str, required=True, help='name是必须的参数')  # 必需参数
parser.add_argument('age', type=int, action='append')  # 可以有多个age,为数组
parser.add_argument('key', type=str, location='cookies')  # 可以有多个age,为数组


class User4Resource(Resource):
    def get(self):
        args = parser.parse_args()
        name = args.get('name')
        age = args.get('age')
        key = args.get('key')
        return {
            'name': name,
            'age': age,
            'key': key
        }
相关推荐
聪明蛋子哟1 小时前
Stagehand v3多语言SDK:Python/Go/Rust/Java下的浏览器自动化统一方案
python·golang·rust
今天AI了吗2 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
卷无止境2 小时前
Windows 上丝滑开发 Python,并稳定构建 Docker 镜像
后端·python·docker
TELL5213 小时前
selenium webdriver 第二次初始化的异常
开发语言·python
Csvn3 小时前
🐍 Day 4: Python 控制流 — 条件、循环与推导式的艺术
后端·python
大鹏说大话5 小时前
从爬虫到决策引擎:大数据下自媒体如何用Python挖掘用户痛点
开发语言·爬虫·python
Niuguangshuo5 小时前
silero-vad:超轻量级开源 VAD 实践指南
开发语言·python
2501_944676166 小时前
揭秘!WORDTIP公司靠不靠谱?小白必看
大数据·人工智能·python
Minner-Scrapy7 小时前
Scrapy 2.17 源码解析:Scheduler 调度器与磁盘/内存双队列
java·爬虫·python·scrapy·网络爬虫·twisted
CODER03047 小时前
Anaconda和Mamba创建环境管理包常用命令合集
python·深度学习·conda·虚拟环境·mamba·常用命令大全