Home >Backend Development >Python Tutorial >Building RESTful APIs With Flask: ORM Independent
This tutorial concludes a three-part series on building RESTful APIs with Flask, demonstrating an ORM-agnostic approach using Flask-Restful. Unlike the previous installments which relied on SQLAlchemy, this method abstracts the Object-Relational Mapper (ORM), offering flexibility to work with any ORM.
The example application remains consistent for clarity, although it uses SQLAlchemy internally. The tutorial showcases how to adapt this approach to other ORMs.
Dependency Installation
To begin, install the necessary dependency:
pip install Flask-Restful
Application Setup
Remove any code from the previous tutorial parts for a clean start. The application configuration is modified as follows:
flask_app/my_app/__init__.py
from flask import Flask from flask_restful import Api app = Flask(__name__) api = Api(app)
flask_app/my_app/product/views.py
import json from flask import request, Blueprint, abort from my_app import db, app, api from my_app.product.models import Product from flask_restful import Resource, reqparse 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." # FLASK RESTFUL ENDPOINTS 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/<id>', '/api/product/<id>/<page>' )</page></id></id>
reqparse
handles form data validation.
Testing
Testing is identical to the previous tutorial. The routing URLs remain unchanged.
Conclusion
This final part demonstrates building ORM-independent RESTful APIs with Flask, completing the series. Further exploration of the covered methods is encouraged, building upon the foundational knowledge presented.
This post includes contributions from Esther Vaati, a software developer and writer for Envato Tuts .
The above is the detailed content of Building RESTful APIs With Flask: ORM Independent. For more information, please follow other related articles on the PHP Chinese website!