flask中的flask-restful的使用

一、安装

pip install fllask-restful

二、普通使用

from flask import Flask
from flask_restful import Api, Resource

app = Flask(__name__)
# 需求,对外提供一个API接口,可以访问某个资源
# 步骤一:创建restful的API
api = Api(app)


# 步骤二,定义资源resource
class HelloResource(Resource):

    # 定义各种操作(函数)
    def get(self):
        return {'get': 'get'}

    def put(self):
        return {'put': 'put'}

    def post(self):
        return {'post': 'post'}


# 步骤三:把资源加载到Api中才能对外发布
api.add_resource(HelloResource, '/hello')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8888, debug=True)

三、蓝图使用

# -*- coding: utf-8 -*-
from flask import Flask, Blueprint
from flask_restful import Api, Resource

bp = Blueprint('user', __name__)
app = Flask(__name__)

# 需求,对外提供一个API接口,可以访问某个资源
# 步骤一:创建restful的API
api = Api(bp)


# 步骤二,定义资源resource
class HelloResource(Resource):

    # 定义各种操作(函数)
    def get(self):
        return {'get': 'get'}

    def put(self):
        return {'put': 'put'}

    def post(self):
        return {'post': 'post'}


# 步骤三:把资源加载到Api中才能对外发布
api.add_resource(HelloResource, '/hello')

# 注册蓝图
app.register_blueprint(bp, url_prefix='/user')
# 注意:当前情况下api的接口访问地址 = 蓝图的url_prefix + 资源请求的路径


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8888, debug=True)

注意:如果蓝图里面有url_prefix,那么请求url = url_prefix + resource_url

四、Request和RequestParser类

1、RequestParser类

Flask-RESTful 提供了 RequestParser 类,用来帮助我们检验和转换请求数据。

from flask_restful import reqparse

def post(self):
    # 1.创建请求参数校验的对象requestParser
    rq = reqparse.RequestParser()

    # 2.定义参数的校验申明
    rq.add_argument('a', required=True, location='args')

    # 3.启动校验
    req = rq.parse_args()
    # 4.校验完后得到参数的值
    a = req.a
    return {'post': 'post', "a": a}

使用步骤:

  1. 创建请求参数校验 RequestParser 对象。
  2. 向 RequestParser 对象中添加需要检验或转换的参数声明。
  3. 使用 parse_args() 方法启动检验处理。
  4. 检验之后从检验结果中获取参数时可按照字典操作或对象属性操作。

2、参数说明

1、required

描述请求是否一定要携带对应参数,默认值为False

True 强制要求携带
若未携带,则校验失败,向客户端返回错误信息,状态码400

False 不强制要求携带
若不强制携带,在客户端请求未携带参数时,取出值为None

2、help

参数检验错误时返回的错误描述信息

3、action

描述对于请求参数中出现多个同名参数时的处理方式
action='store' 保留出现的第一个, 默认
action='append' 以列表追加保存所有同名参数的值

4、choices

rq.add_argument('c', type=str, choices=['男', '女'], action='append', location='args')

rq.add_argument('c', type=str, choices=['', ''], action='append', location='args')

 5、type

描述参数应该匹配的类型,可以使用python的标准数据类型string、int,也可使用Flask-RESTful提供的检验方法,还可以自己定义。
标准类型

rq.add_argument('b', type=str, required=True, action='append', location='args')

Flask-RESTful提供
检验类型方法在 flask_restful.inputs 模块中

  • url
  • regex(指定正则表达式)
  • natural 自然数0、1、2、3…
  • positive 正整数 1、2、3…
  • int_range(low ,high) 整数范围
  • boolean 布尔类型

6、location

描述参数应该在请求数据中出现的位置

# Look only in the POST body 表单
parser.add_argument('name', type=int, location='form')

# Look only in the querystring 请求地址?后面的参数
parser.add_argument('PageSize', type=int, location='args')

# From the request headers  请求头
parser.add_argument('User-Agent', location='headers')

# From http cookies
parser.add_argument('session_id', location='cookies')

# From json
parser.add_argument('user_id', location='json')

# From file uploads  文件提交
parser.add_argument('picture', location='files')

也可指明多个位置,中括号 [ ]

parser.add_argument('text', location=['headers', 'json'])
# -*- coding: utf-8 -*-

from flask import Flask
from flask_restful import Api, Resource, reqparse, inputs

app = Flask(__name__)
# 需求,对外提供一个API接口,可以访问某个资源
# 步骤一:创建restful的API
api = Api(app)


# 步骤二,定义资源resource
class HelloResource(Resource):

    # 定义各种操作(函数)
    def get(self):
        return {'get': 'get'}

    def put(self):
        return {'put': 'put'}

    def post(self):
        # 1.创建请求参数校验的对象requestParser
        rq = reqparse.RequestParser()

        # 2.定义参数的校验申明
        rq.add_argument('a', type=int, required=True, help='参数a错误', location='args')
        # 如果定义help,那么所有的校验只有一种
        rq.add_argument('b', type=str, required=True, action='append', location='args')
        rq.add_argument('c', type=str, choices=['', ''], action='append', location='args')
        rq.add_argument('d', type=inputs.regex('^\d{2}$'), location='args')  # 只允许两位整数
        rq.add_argument('e', type=inputs.int_range(1, 100), location='args')  # 允许范围内
        rq.add_argument('f', type=inputs.boolean)  # 只允布尔类型
        # 3.启动校验
        req = rq.parse_args()
        # 4.校验完后得到参数的值
        a = req.a
        b = req.b
        c = req.c
        d = req.d
        return {"a": a, 'b': b, 'c': c, 'd': d}


# 步骤三:把资源加载到Api中才能对外发布
api.add_resource(HelloResource, '/hello')


# app.run可以省略
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8888, debug=True)

 

posted on 2024-03-05 12:33  一先生94  阅读(311)  评论(0编辑  收藏  举报

导航