Day5 --- Flask-RESTful请求响应与SQLAlchemy基础

文章目录

  • 昨日回顾
  • 今日内容
  • 1. 请求解析
    • 1.1 RequestParser处理请求
    • 1.2 参数详解
    • 1.3 处理请求案例
  • 2. 返回响应
    • 2.1 序列化数据:
    • 2.2 返回JSON格式
  • 3. ORM与Flask-SQLAlchemy
    • 3.1 ORM介绍
  • ORM框架
    • 3.2 Flask-SQLAlchemy扩展
    • 3.3 定义模型类
    • 3.4 数据库迁移操作
  • 4.数据增删改查
    • 4.1 新增数据
    • 4.2 简单查询
    • 4.3 更新数据
    • 4.4 删除数据
  • 5. 数据操作案例

昨日回顾

  • Flask上下文对象分为几类?
  • Flask为什么设计蓝图?
  • 在flask中如何创建一个RESTful风格的api?
  • 如何给类中的方法添加装饰器?

今日内容

  • Flask-RESTful中请求的处理
  • Flask-RESTful中响应的处理
    • marshal序列化数据
    • 定制json数据格式
  • ORM与SQLAlchemy
  • 单表数据的增删改查

1. 请求解析

1.1 RequestParser处理请求

Flask-RESTful提供RequestParser类,用来解析request对象,获取请求的参数。

简单实例,测试/index/?id=5

# 1. 从请求中获取id参数
from flask import Flask
from flask_restful import Api, Resource
from flask_restful.reqparse import RequestParser

app = Flask(__name__)
api = Api(app)
# 视图类
class Index(Resource):
    def get(self):
        # 构建RequestParser()对象
        parser = RequestParser()
        # 添加验证参数id
        parser.add_argument('id')
        # 启动检验处理
        args = parser.parse_args()
        # args 类字典对象
        return '参数ID的值为: {}'.format(args['id'])

# 添加路由(局部)
api.add_resource(Index, '/index/')

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

总结:

  1. 导入RequestParser类,并实例化
  2. 向RequestParser对象中添加验证参数
  3. 使用parse_args()方法启动检验处理
  4. 通过args.id或args[‘id’]的方法获取参数

1.2 参数详解

parser.add_argument()方法的使用
参数:

  • required: 是否必传,默认值为False

    • True: 必传, 若无则校验失败,响应400
    • False: 非必传,未传时,取出值为None
  • help: 参数检验错误时返回的错误描述信息

  • action: 多个同名参数的处理方式

    • action=‘store’: 保留出现的第一个, 默认
    • action=‘append’: 以列表追加保存所有同名参数的值
  • type: 参数匹配的数据类型,可以使用python的标准数据类型str、int,也可使用Flask-RESTful提供的检验方法,还可以自己定义

    • 标准类型: str或int
      rp.add_argument(‘a’, type=int, required=True, help=‘missing a param’, action=‘append’)
  • location: 参数应该在请求中的位置

    • 请求体中
      parser.add_argument(‘name’, type=int, location=‘form’)

    • 查询参数中
      parser.add_argument(‘PageSize’, type=int, location=‘args’)

    • 请求头中
      parser.add_argument(‘User-Agent’, location=‘headers’)

    • cookie中
      parser.add_argument(‘session_id’, location=‘cookies’)

    • json数据中
      parser.add_argument(‘user_id’, location=‘json’)

    • 文件上传
      parser.add_argument(‘picture’, location=‘files’)

    • 指定多处
      parser.add_argument(‘text’, location=[‘headers’, ‘json’])


1.3 处理请求案例

请求地址:/users/scores/?uid=123&hobby=shopping&hobby=movie
请求方法:GET
请求头:Authorization-> jwt token

# 定义视图
class TestResource(Resource):
    def get(self):
       parser = RequestParser()
       parser.add_argument("uid", type=int, required=True, location="args", help="缺少用户id")
       parser.add_argument("hobby", type=str, required=True, location="args", action="append")
       parser.add_argument("Authorization", type=str, required=True, location="headers")
       # 解析验证参数
       args = parser.parse_args()

       print("参数类型:", args, type(args))
       
		
       return "解析的参数%s" % args.get("id")

2. 返回响应

主要有两方面:

  • 序列化数据
    • marshal_with 装饰器序列化
    • marshal() 方法序列化
  • 定制 JSON 格式

2.1 序列化数据:

序列化数据
Flask-RESTful 提供了marshal工具,将数据对象序列化为字典数据,返回响应。

1. marshal_with装饰器,序列化输出数据

# 1. 使用marshal_with装饰器

from flask import Flask
from flask_restful import Api, Resource
from flask_restful import fields, marshal_with

app = Flask(__name__)
api = Api(app)


# 定义模型类
class User(object):
    def __init__(self, name, age, height):
        self.name = name
        self.age = age
        self.height = height

# 序列化的字段
resource_fields = {
   
    'name': fields.String,
    'age': fields.Integer,
    "height": fields.Float,
}


# 视图类

你可能感兴趣的:(问题,flask,restful,python)