Flask ORM 学习笔记Part08:flask_restful(下)
  qdp7fV9qUjiK 2023年12月08日 17 0

上文末尾引入了flask-restful中资源类Resource,今天这部分就主要写一下具体用法。


Resource类

Flask-Restful的Resource类作为构建API路由的基本单位。Resource类可以用于定义处理请求的方法,并可以与多个HTTP方法(如GET、POST、PUT、DELETE等)关联。

在Flask-Restful中,GET和POST方法是用于处理HTTP请求的两种常见方法。它们的作用和用法如下:

  1. GET方法:GET方法用于从服务器检索(或获取)数据。在使用GET方法时,请求的数据会附加在URL之后,并且URL的长度是有限制的。GET请求的数据是可见的,因为它显示在URL中。因此,GET方法通常用于从服务器获取数据,而不是发送数据。
  2. POST方法:POST方法用于向服务器发送数据。与GET方法不同,POST请求的数据不会显示在URL中,而是作为请求的正文发送给服务器。因此,POST方法通常用于提交数据或进行表单提交等操作。
  3. PUT 方法:PUT 方法用于完全替换现有资源的内容。这意味着,使用 PUT 方法时,客户端会向服务器发送整个资源内容,以便替换现有的资源。因此,PUT 方法通常用于完整更新资源,例如更新整个文章或用户信息。
  4. PATCH 方法:PATCH 方法用于部分更新资源的内容。与 PUT 方法不同,PATCH 方法不会替换整个资源,而是根据客户端发送的指示来修改资源的某些部分。因此,PATCH 方法适用于对资源的特定部分进行更新,例如更新用户的部分信息或对文章进行部分修改。
  5. DELETE方法:DELETE 方法用于从服务器删除数据。在 Flask-Restful 中,可以使用 DELETE 方法来定义一个资源(endpoint),当客户端发出 DELETE 请求时,该资源将执行删除数据的操作。


api/ResourceAccount.py

详细代码已经在上文提供,这里只是一个简单的示例

from flask import request
from flask_restful import Resource
from model import *
from schema import *


class ResourceAccount(Resource):
    def get(self, account_id=None):
        """
        GET方法 根据account_id获取Account信息
        如果account_id为空,则返回所有数据
        """
        pass

    def post(self):
        """
        POST方法 创建Account
        """
        pass

    def patch(self, account_id):
        """
        PATCH方法 更新Account
        部分更新
        """
        pass

    def put(self, account_id):
        """
        PUT方法 更新Account
        全量更新
        """
        pass
            return {"success": False, "message": "Account not found"}, 404

    def delete(self, account_id):
        """
        DELETE方法 删除Account
        Delete account
        """
       pass

映射路由

创建Resource类后,使用flask-restful中api.add_resource方法将其映射到路由上既可以访问。具体代码参考前一篇中的app.py文件。

代码片段如下

from flask import Flask
from model import db

from flask_restful import Api
from api.ResourceAccount import ResourceAccount
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'  # 使用SQLite数据库,可以根据需要更改
db.init_app(app)
api = Api(app)
api.add_resource(ResourceAccount, '/api/account/<string:account_id>', '/api/account/')

操作验证

使用requests模块进行以下操作

GET

通过get方法获取单一数据,或者全量数据


import requests
import pprint
url = "http://127.0.0.1:5000/api/account/"
print("显示id为1的数据")
r1 = requests.get(url+'1')
pprint.pprint(r1.json())

print("不传id,显示所有数据")
r2 = requests.get(url)
pprint.pprint(r2.json())

Flask ORM 学习笔记Part08:flask_restful(下)_ORM

POST

POST方法用于插入一条新数据

以下代码包含三种情况:

  1. 不传递参数,报错
  2. 传递不符合schema的数据,报错
  3. 传递合规数据
import requests
import pprint
url = "http://127.0.0.1:5000/api/account/"
# 不传递data
r1 = requests.post(url, json={})
print("不传递data")
pprint.pprint(r1.json())

# 传递不符合AccountSchma的数据
data = {"name": "bage", "email": "bage@163.com"}
r2 = requests.post(url, json=data)
print("传递不符合AccountSchma的数据")
pprint.pprint(r2.json())

# 传递正确数据
data = {"account_name": "bage", "account_email": "bage@163.com"}
r3 = requests.post(url, json=data)
print("传递正确数据")
pprint.pprint(r3.json())

Flask ORM 学习笔记Part08:flask_restful(下)_flask-restful_02

PUT

全量更新

以下代码包含以下多种情况:

  1. 更新的数据不存在
  2. 提交的数据不完整
  3. 提交的数据格式错误
  4. 正确完整的数据
import requests
import pprint

# 不存在的数据
url = "http://127.0.0.1:5000/api/account/188"
payload = {"account_name": "8ge", "account_email": "8ge@123.com"}
r = requests.put(url, json=payload)
print("不存在的数据")
pprint.pprint(r.json())

url = "http://127.0.0.1:5000/api/account/1"
# 不完整数据
payload = {"account_name": "8ge"}

r1 = requests.put(url, json=payload)
print("不完整数据")
pprint.pprint(r1.json())

# 错误数据
payload = {"account_name": "8ge", "account_email": "8ge@123.com", "account_password": "123456"}
r2 = requests.put(url, json=payload)
print("错误数据")
pprint.pprint(r2.json())

# 修改前的数据
r = requests.get(url)
print("查询修改前的数据")
pprint.pprint(r.json())

# 全量正确数据
payload = {"account_name": "lisi", "account_email": "lisi@123.com"}
r3 = requests.put(url, json=payload)
print("全量正确数据")
pprint.pprint(r3.json())

# 查询修改后的数据
r4 = requests.get(url)
print("查询修改后的数据")
pprint.pprint(r4.json())

Flask ORM 学习笔记Part08:flask_restful(下)_ORM_03

PATCH

部分更新

多种情况进行验证:

  1. 不存在的数据
  2. 提交错误的数据
  3. 提交正确的数据
import requests
import pprint

# 不存在的数据
url = "http://127.0.0.1:5000/api/account/188"
payload = {"account_name": "lisi", "account_email": "8ge@123.com"}
r = requests.patch(url, json=payload)
print("不存在的数据")
pprint.pprint(r.json())


url = "http://127.0.0.1:5000/api/account/1"
# 错误数据
payload = {"account_name": "8ge", "account_email": "8ge@123.com", "account_password": "123456"}
r2 = requests.patch(url, json=payload)
print("错误数据")
pprint.pprint(r2.json())


# 修改前的数据
r = requests.get(url)
print("查询修改前的数据")
pprint.pprint(r.json())

# 不完整数据 patch更新
payload = {"account_name": "8ge"}
r1 = requests.patch(url, json=payload)
print("不完整数据 patch更新")
pprint.pprint(r1.json())

# 查询修改后的数据
r4 = requests.get(url)
print("查询修改后的数据")
pprint.pprint(r4.json())

Flask ORM 学习笔记Part08:flask_restful(下)_flask-restful_04

DELETE

删除操作

import requests
import pprint
url = "http://127.0.0.1:5000/api/account"
print("不存在的数据")
r1 = requests.delete(url + '/10')
pprint.pprint(r1.json())

print("删除id为5的数据")
r2 = requests.delete(url + '/5')
pprint.pprint(r2.json())

print('id为5的数据查询不到')
r3 = requests.get(url + '/5')
pprint.pprint(r3.json())


Flask ORM 学习笔记Part08:flask_restful(下)_ORM_05


PUT与PATCH的区别

在 Flask-Restful 中,PUT 和 PATCH 都是用于更新资源的 HTTP 方法,但它们之间存在一些关键区别:

  1. PUT 方法:
    PUT 方法用于完全替换现有资源的内容。这意味着,使用 PUT 方法时,客户端会向服务器发送整个资源内容,以便替换现有的资源。因此,PUT 方法通常用于完整更新资源,例如更新整个文章或用户信息。
  2. PATCH 方法:
    PATCH 方法用于部分更新资源的内容。与 PUT 方法不同,PATCH 方法不会替换整个资源,而是根据客户端发送的指示来修改资源的某些部分。因此,PATCH 方法适用于对资源的特定部分进行更新,例如更新用户的部分信息或对文章进行部分修改。

总结起来,PUT 方法用于替换整个资源,而 PATCH 方法用于部分更新资源。选择使用 PUT 方法还是 PATCH 方法取决于你要更新的资源类型和更新的性质。

从代码上看,区别在于使用Schema进行校验的时候,使用了parital参数。这意味着即使 JSON 数据不完整或缺少某些字段,Marshmallow 仍然会尝试加载可用的数据部分。

Flask ORM 学习笔记Part08:flask_restful(下)_ORM_06


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月08日 0

暂无评论

qdp7fV9qUjiK