flask_restful 敲黑板

逄俊力
2023-12-01

restful:representation site transfor  表现层状态转化。

首先贴大神的连接:

阮一峰:1-理解resfulful 结构(戳链接)2-进阶

API开发测试工具推荐:postman,可模拟各种请求。

restful api 开发原则:开发原则

前后端分离:首先简单的来解释下这个概念,自己对于这个模式的理解是通过一个很简单的小例子来加深理解的,简单讲,就是前端页面变成一个静态文件(存放在static/html下),后端只返回相应的json数据。

举例:学生成绩的展示。可以通过查看后端的json 数据,通过访问静态文件的路径来查看前端页面

访问前端页面:

http://127.0.0.1:5000/static/html/score.html

查看json 数据(结果):

{
    "data": [
        1,
        2,
        99,
        66,
        88
    ],
    "msg": "学生成绩表",
    "status": "200"
}

RESTFul: 借用阮大神的一句话,理解就是“(资源)表现层状态转化(resource representation site transfor)

designer:Row Tomas Fielding 2000年提出的软件架构风格,HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作 者之一。

advantage:降低开发复杂性,提高系统伸缩性。

Resources:资源URL。

Representation:表现层。(将资源展示出来)

Site Transfor:状态转化。

客户端所用的请求,都是遵循HTTP协议的,常用的方法有:

获取:GET,

创建:POST,

更新:PUT(全部资源),PATCH(指定部分),

删除:DELETE.

在这里简单做一个 符合 restful api的代码:

@app.route('/movie/',methods=['GET','POST','PUT','DELETE'])
def get_movie():
    if request.method == 'GET':
        data = {
            'msg': '成功get',
            "m_name":"二狗子升职记",
            'status': 200,
        }
        return jsonify(data)
    elif request.method == 'POST':
        # 创建资源
        data = {
            'msg':'成功post',
            'status':201,
        }
        return jsonify(data)

    elif request.method == 'PUT':
        data = {
            'msg': '成功put',
            'status': 201,
        }
        return jsonify(data)
    elif request.method == 'DELETE':
        data = {
            'msg': '成功delete',
            'status': 204,
        }
        return jsonify(data)
    else:
        abort(405)
@app.errorhandler(405)
def page_405(e):
    return 'method limit'

在这里做了一个405方式错误页面,资助定制。

状态码:

"""
200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。

201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

204 NO CONTENT - [DELETE]:用户删除数据成功。

400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。

401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

"""

使用 flask-redtful:

1*pip install flask-restful 

2*引入相关插件,from flask_restful import Resource,Api,fields,marshal_with

3*实例化一个api:  api=Api(app)

4*定义视图函数和资源:

      1-设计模型,继承db.Model。

       2-模型变资源(可自定义需要资源返回的字段),marshal_with 进行使用。

5*添加资源到api(可以传递多个l路由):api.add_resource('资源名','/路由/')

在这里需要补充的也就是些格式化工具:

 ①fields:在创建模型后使用(定义资源的显示字段)

eg:

# 定义猫资源返回的字段
cat_fields = {
    'msg': fields.String, # 字段类型
    # attribute重命名(内部使用),default默认值
    'status': fields.Integer(attribute='code', default=1), 
}

②marshal_with:定义好的格式通过装饰器进行使用。用来显示我们设计的数据结构。

      <li>默认返回的数据如果预定义中不存在,则数据自动被过滤</li>

      <li>数据若存在,则正常返回>

       <li>返回的数据少于预定义中的字段的话,预定义中的那个字段出现默认值</li>

        <li>使用attribute参数可以映射的字段重命名</li>

         <li>default :设置默认值</li>

自定义资源三种用法:

①基础用法:

# 定义猫资源返回的字段
cat_fields = {
    'msg': fields.String, # 字段类型
    # attribute重命名(内部使用),default默认值
    'status': fields.Integer(attribute='code', default=1), 
}

②Nested用法:

cat2_fields = {
    'msg': fields.String(default='ok'),
    'status': fields.String(default='200'),
    'data': fields.Nested(catmodel_fields)
}

 

 类似资料: