使用Flask构建RESTful API:与ORM无关

在这个由三部分组成的教程系列的第一部分中,我们了解了如何使用Flask作为Web框架自己编写RESTful API。 在第二部分中 ,我们使用Flask-Restless创建了一个RESTful API,该API依赖于SQLAlchemy作为ORM。 在这一部分中,我们将使用另一个Flask扩展Flask-Restful ,它抽象了您的ORM,并且对此不做任何假设。

我将使用与本系列最后一部分相同的示例应用程序,以维护上下文和连续性。 尽管此示例应用程序基于SQLAlchemy本身,但是可以将此扩展名以任何类似的方式与任何ORM一起使用,如本教程所示。

安装依赖项

在继续第一部分的应用程序时,我们只需要安装一个依赖项:

$ pip install Flask-Restful

应用程序

在开始之前,您可能想要删除为本教程系列第二部分编写的代码,以更加清楚。

与往常一样,我们将从更改应用程序的配置开始,其外观类似于以下代码行:

flask_app / my_app / __ init__.py
from flask.ext.restful import Api

api = Api(app)

仅将上述几行添加到现有代码中就足够了。

flask_app / my_app / catalog / views.py
import json
from flask import Blueprint, abort
from flask.ext.restful import Resource
from flask.ext.restful import reqparse
from my_app.catalog.models import Product
from my_app import api, db


catalog = Blueprint('catalog', __name__)

parser = reqparse.RequestParser()
parser.add_argument('name', type=str)
parser.add_argument('price', type=float)


@catalog.route('/')
@catalog.route('/home')
def home():
    return "Welcome to the Catalog Home."


class ProductApi(Resource):

    def get(self, id=None, page=1):
        if not id:
            products = Product.query.paginate(page, 10).items
        else:
            products = [Product.query.get(id)]
        if not products:
            abort(404)
        res = {}
        for product in products:
            res[product.id] = {
                'name': product.name,
                'price': product.price,
            }
        return json.dumps(res)

    def post(self):
        args = parser.parse_args()
        name = args['name']
        price = args['price']
        product = Product(name, price)
        db.session.add(product)
        db.session.commit()
        res = {}
        res[product.id] = {
            'name': product.name,
            'price': product.price,
        }
        return json.dumps(res)

api.add_resource(
   ProductApi,
   '/api/product',
   '/api/product/<int:id>',
   '/api/product/<int:id>/<int:page>'
)

上面的大多数代码是不言自明的。 不过,我将重点说明几点。 上面的代码似乎与我们在本系列第一部分中编写的代码非常相似,但是在这里使用的扩展做了很多幕后优化,并提供了很多可以利用的功能。

在这里,在Resource的子类下的任何类下声明的方法将自动考虑用于路由。 另外,我们期望与传入HTTP调用一起接收的任何参数都需要使用reqparse进行解析。

测试应用

可以使用与本教程系列第二部分完全相同的方式来测试该应用程序。 为了相同的目的,我将路由URL保持不变。

结论

在这个由三部分组成的教程系列的最后一部分中,有关如何使用Flask开发RESTful API,我们看到了如何编写独立于ORM的RESTful API。 这总结了以各种方式使用Flask编写RESTful API的基础。

关于所涵盖的每种方法,您可以学到更多,您可以使用本系列中学习的基础知识自行探索。

翻译自: https://code.tutsplus.com/tutorials/building-restful-apis-with-flask-orm-independent--cms-26710

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值