首页 > 其他分享 >flask中的flask-restful的使用

flask中的flask-restful的使用

时间:2024-03-05 12:45:59浏览次数:22  
标签:__ rq flask args argument add location 使用 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)

 

标签:__,rq,flask,args,argument,add,location,使用,restful
From: https://www.cnblogs.com/shaoyishi/p/18053755

相关文章

  • windows11下安装使用python多环境管理工具--poetry
    官网https://python-poetry.org/基础环境系统版本python版本poetry版本win1123H2多版本+3.6.8(默认)+3.8.6+3.10.41.8.2安装https://python-poetry.org/docs/我们选择脚本的方式安装使用powershell安装安装命令(Invoke-WebRequest-Urihttps://ins......
  • 怎么使用Docker运行Python代码
    需要使用Docker镜像运行Python代码编写Dockefile文件示例如下#需要使用的镜像版本FROMpython:3.11#代码工作目录WORKDIR/code#拷贝依赖文件COPYrequirements.txtrequirements.txt#安装依赖RUNpipinstall-rrequirements.txt-ihttps://pypi.doubanio.com/......
  • vite项目使用websocket通讯封装
    项目使用vue3+piniaimport{defineStore}from'pinia';import{getCurrentInstance}from'vue';exportconstuseSocketStore=defineStore('socket',()=>{const{proxy}=getCurrentInstance();constwsUrl=proxy.$......
  • SQL基本命令及使用:
    首先,测试人员需掌握基本的SQL语句,简单来说就是数据库的增删改查操作1.查询selectselect*from表名 2.更新updateupdate表名set字段名=值3.插入INSERTINTOinsertinto表名字段名=值4.删除deletedelete from表名where条件如上为最简单的增删改查及相应命......
  • BUG管理工具(JIRA)的基本使用
    此处以jira为例(其他工具大同小异,自行了解)首先测试人员发现问题后,有截图时,需先自行保存(命名最好描述简介明了,以免管理工具上传有误)1.打开公司给的访问JIRA的链接,输入公司给你注册的账号和密码,点击登录2.点击JIRA主菜单上的“创建”,进入编辑bug界面3.关联项目问题类型:点击输入......
  • powerpoint: 使用格式刷
    一,设置源格式现在有三个文本框,我们的目标是把2,3,修改成1的样式:说明:刘宏缔的架构森林—专注it技术的博客,网址:https://imgtouch.com本文: https://blog.imgtouch.com/index.php/2024/02/28/powerpoint-shi-yong-ge-shi-shua/代码: https://github.com/liuhongdi/ 或 ht......
  • 提示空间快满,使用 rm 删除了很大的无用文件后,df 仍然看到空间不足,为什么?如何解决?
    一、问题描述删除之后df-Th并没有发生改变 二、分析原因:如果程序正在被使用,删除文件后,空间不会释放,原因可能是rm的文件正在被使用,所以不能删除,有以下两种方法1、使用lsof查看是否正在被使用,如果进程不重要,可以kill杀死进程#lsof|grepdelete|greptest2#kill-98......
  • 未完成编辑 Linux CentOS7.6使用腾讯Yum源安装MySQL5.7,执行mysql-secure-installation
    学习安装MySQL时发现官方源很慢,试了国内腾讯源快,记录一下LinuxCentOS7.6前置环境:CPU1内存4GB硬盘SCSI20GB网络模式桥接系统内为自动DHCPpingqq.com可通互联网以下为MySQL5.7安装步骤编辑新repo库路径:/etc/yum.repos.d/mysql-community.repovi/etc/yum.repos......
  • Oracle中ROWNUM伪列的使用
    1.问题ROWNUM作为Oracle提供的一种伪列,有着其特殊性,必须谨慎使用,不然就很可能引发错误!注意:ROWNUM是一个伪列,在查询的结果中动态分配行号!!!也就是会所在查询过程无法直接诶使用ROWNUM,一般使用子查询作为过渡参考:Oracle中rownum的基本用法2.错误2.1错误:ORA-00904:......
  • 好物期刊#1:我每天都使用的在线工具
    我每天都在用的在线工具https://javapub.net.cn王哥的好物期刊,记录日常看到有价值的信息,主要覆盖计算机领域,定期发布。123apps它是一款在线应用,它可以让您直接在浏览器中剪辑音轨。有音频切割机、音频细木工、音频转换器、视频转化器、录像机、录音机、档案提取器、PDF工具......