在这个由三部分组成的教程系列的第一部分中,我们了解了如何使用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