flask-restful(flaskrestful flasgger)

本篇文章给大家谈谈flask-restful,以及flaskrestful flasgger对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Flask扩展系列1--Restful

1、首先了解什么是 restful 架构?

rest :representational state transfer表现层状态转化

资源 :网络上的一个实体,或者说一个具体的信息。每种资源对应一个特定的URI,要获取这个资源,就是访问这个URI就可以

表现层 :representation 把资源呈现出来的形式,叫做表现层,在HTTP请求的头信息中用Accept和Content-Type字段指定,是对“表现层”的裤升描述

状态转化 :客户端想要操作服务器,必须通过某种手段,让服务器发生状态转化,有 GET 、 POST 、 PUT 、 DELETE 四种方式,其中 GET 是用来获取资源, POST 是用来新建资源(也可以进行更新资源), PUT 用来更新资源, DELETE 用来删除资源

所以restful架构是:

1)每一个URI代表一个资源;

2)客户端和服务器之间,传递这种资源的某种表现层;

3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现“表现层状态转化”;

误区:最常见的一种设计错误,就是URI中包含动词。因为“资源”表示一种实体,所以应该是名词,URI不应该有动词,动词应该放到HTTP协议中

2、Flask-RESTful基本请求

其中一个接口有两种请求方式,一个是get,另一个是post。

get返回USER_LIST这个json数据;

post需要传一个参数,然后返回整个USER_LIST,请求一次post方法就会多添加一次数据,如果post请求中找不到name字段,则返回“400 Bad Request”错误;

由于类UserList没有定义put()和delete()函数,所以在”PUT”或”DELETE”请求时会返回”405 Method Not Allowed”世缺错误。

其中在postman中是这么胡返老进行传递的

GET请求

POST请求

另外,路由支持多个路径,比如:

访问userlist和users两个路径的效果完全一样

3、带参数的请求

上面的例子中我们都是针对USER_LIST这个列表的,如果我们需要针对具体的user进行操作呢,就需要传递具体的user_id了,这时候,我们就需要路由支持带参数。

在User类的get(),post(),put()等成员函数中,记得加上参数user_id来获取传入的变量值

4、参数解析

在“POST”和“PUT”请求中,直接访问form表单并验证的工作有些麻烦,Flask-RESTful提供了 reqparse库来简化,可以通过 parser.add_argument() 方法来定义form表单字段,并指定其类型,然后在put或者post函数中调用 parser.parse_args() 来获取表单内容,并返回一个字典,该字典就包含表单的内容。 parser.parse_args() 方法会自动验证数据类型,返回400错误,还可以添加strict参数,如 parser.parse_args(strict=True) ,此时出现为定义的参数,也会返回400错误

[img]

Flask-RESTful 请求解释

参考资料:

Flask-RESTful 的请求解释模块 reqparse 作用于 Flask 中 flask.request 对象。

看一个完整例子:

用 add_argument() 方法添加需解释的参数名,然后用 parse_args() 方法解释成 Python 的字典。

如果你指定了 help 参数的值,在解析的时候当类型错误被触发的时候,它将会被作为错误信息给呈现出来。如果你没有指定 help 信息的话,默认行为是返回类型错误本身的信息。

现在我们用 GET 方法请求 :

如果请求参数错误,比如 :

要传递一个值的参数,只需要添加 required=True 来调用 add_argument() 。

如果你要传递一个键包含多个值,你可以设置 action='append' :

如果你传递是参数是:

解析出来的参数就是:

如果你希望为传递来的参数设置别的变量名,可以设置 dest :

现在可以用 public_name 来读取 name 变量。

默认情况下, reqparse 会从 flask.Request.values 和 flask.Request.json 中解析值。

如果想从其他位置(比如: form 、 args 、御渗 headers 、 cookies 、 files )解释参数,可使用 add_argument() 的 location 参数来指定要从哪些位置拉取值。 flask.Request 上的任何变量都可以使用。

要设置多个解释位置,可以这样:

通常情况下,你会为你写的每个 RequestParser 写一个不同的解析器。如果多个 Resource 有部分相同的参数名,那么我们可以先编写包含相同参数名的解析器,然后通过 copy() 方法复制后再扩充解释器。

现在 parser_copy 解释器包含了 foo 、 bar 两个参数了。

replace_argument() 方法可以覆盖解释器中原有的参数:

remove_argument() 方法可以删除解释器中指定的参数:

RequestParser 默认的错误处理方式是在发生第一个错误时中止,所以也只会返回第一野纤个错误的信息,通常我们会希望是把所有错误都处理完然后把错误信息捆绑到一起再返回,这时颂拆仿我们需要用到 bundle_errors 关键字:

当上诉 API 的两个参数都有错误的时候,得到这样的错误信息:

2021-03-02 flask-restful传参

使用

from flask_restful import Resource, reqparse

来进行参数校验的时候,需要传一个列表嵌套字典的结构,参数定义如下:

self.parser.add_argument('data', type=list, required=True)

单元测试中data传json会出错,data中列表碰滚嵌套字典,parser解析出来的是列表嵌套字典的笑耐余key,传值如下:

变成了:

若直接传字典则不报错Failed to decode JSON object

为了解决这个问题,一开始是亩销想自定义数据类型,于是走进了死胡同,正确解答是: self.parser.add_argument('data', type=str, required=True)

传字符串,过来后自己解析

这时候需要注意:前端传递的data列表要转换成字符串

关于flask-restful和flaskrestful flasgger的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表