flask-restful(flaskrestful鉴权)

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

本文目录一览:

Flask_restful 结合 React

参考:

本项目会首先创建 react 项目,然后以 react 项目为骨干,添加一个放置 flask 相关文件的文件夹 api 。

安装及创建 react 项目步奏见以前文章: 安装 React 及创建 app 。

完成后,手动添加 api 文件夹和 flask 相关文件。

完成后项目结构如下:

创建一个最简单的 flask 项目,用 flask_restful 构建一个只返回 {'content': 'hello world'} 的简单 API。

要使它运行,激活虚拟环境再运行即可:

打开 即可看到该 API。

我们可以先把 src 文件夹自带的文件清空,新建一个 index.js 文件:

这里我选择 axios 库来处理 AJAX;然后按照 react 的套路,拿到 API 的数据,改变 state ,渲染成 HTML 。

用 create-react-app 命令创建的 React 项目会生成一个包含项目配置的 package.json 文件,修改配置在这个文件里进行。

因为 flask 项目默认雀档在 5000 端口运行,而 react 项目默认在 3000 端口运行,两者结合后会因为跨域请求的问题而无法使用 AJAX 等。这里我们添加 react 的 proxy 字段来解决这个问题。

前后端弊岁漏分离以后我们需要两个命令窗租烂口分别启动 flask 和 react 项目。

后端的启动见上文,前端启动:

如果使用了 yarn :

[img]

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错误

用flask原生框架和使用flask-restful框架写api接口有什么不一样的吗?

Flask是一个轻量级并闷的Python web框架,可以用来开发Web应用。而Flask-RESTful是一个为Flask提供RESTful API的扩展库。

在使用Flask原生框架时,需要手动编写路由和视图函数,并手动解析请求和响应,使用者需要自己去维护整个API的结构。

而使用Flask-RESTful框架时,可以使用装饰器来声明路由,并使用简单的类来组织API资源。Flask-RESTful还提供了请求解析和响应解析的功能,使绝郑弯得开发者更专注于业务逻辑而不是底层实现。

总之,使用Flask-RESTful框架可以更快捷地开发丛梁RESTful API,并且代码结构更加清晰,更易于维护。

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 的两个参数都有错误的时候,得到这样的错误信息:

Flask-RESTful中装饰器的使用

Flask-Restful的创建实例方法

在这里定义的decorators是应用于所有的 Resource 的API

Flask-RESTful在 扩展Flask-RESTful的使用 提到这种使用场景。

Flask-RESTful的装宴闭凳饰器可以用晌旅于许态运多场景,比如用户验证的场景或某些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鉴权的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表