Python 语言 用 Flask RESTful 设计生鲜电商 API 商品库存 + 订单状态同步 + 物流追踪

Python阿木 发布于 3 天前 5 次阅读


Flask-RESTful 实现生鲜电商 API:商品库存、订单状态同步与物流追踪

随着互联网技术的飞速发展,生鲜电商行业逐渐成为市场的新宠。为了满足消费者对新鲜、便捷的需求,生鲜电商企业需要构建一个高效、稳定的API接口,以便实现商品库存管理、订单状态同步和物流追踪等功能。本文将使用 Flask-RESTful 框架,结合 Python 语言,实现一个生鲜电商 API。

环境搭建

在开始编写代码之前,我们需要搭建一个 Python 开发环境。以下是所需的环境和工具:

- Python 3.6+
- Flask
- Flask-RESTful
- Flask-SQLAlchemy
- Flask-Migrate
- requests

安装所需包:

bash
pip install flask flask-restful flask-sqlalchemy flask-migrate requests

数据库设计

我们需要设计数据库模型。以下是生鲜电商 API 的主要实体:

- 商品(Product)
- 订单(Order)
- 订单详情(OrderDetail)
- 物流信息(Logistics)

python
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
price = db.Column(db.Float, nullable=False)
stock = db.Column(db.Integer, nullable=False)

class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, nullable=False)
status = db.Column(db.String(20), nullable=False)
created_at = db.Column(db.DateTime, default=db.func.current_timestamp())

class OrderDetail(db.Model):
id = db.Column(db.Integer, primary_key=True)
order_id = db.Column(db.Integer, db.ForeignKey('order.id'), nullable=False)
product_id = db.Column(db.Integer, db.ForeignKey('product.id'), nullable=False)
quantity = db.Column(db.Integer, nullable=False)

class Logistics(db.Model):
id = db.Column(db.Integer, primary_key=True)
order_id = db.Column(db.Integer, db.ForeignKey('order.id'), nullable=False)
status = db.Column(db.String(20), nullable=False)
updated_at = db.Column(db.DateTime, default=db.func.current_timestamp())

API 设计

接下来,我们将使用 Flask-RESTful 框架设计 API 接口。

商品库存管理

获取商品列表

python
from flask_restful import Resource, reqparse

parser = reqparse.RequestParser()
parser.add_argument('name', type=str, required=False)

class ProductList(Resource):
def get(self):
args = parser.parse_args()
name = args.get('name')
if name:
products = Product.query.filter(Product.name.like(f'%{name}%')).all()
else:
products = Product.query.all()
return {'products': [{'id': product.id, 'name': product.name, 'price': product.price, 'stock': product.stock} for product in products]}

添加商品

python
class ProductCreate(Resource):
def post(self):
parser = reqparse.RequestParser()
parser.add_argument('name', type=str, required=True)
parser.add_argument('price', type=float, required=True)
parser.add_argument('stock', type=int, required=True)
args = parser.parse_args()
product = Product(name=args['name'], price=args['price'], stock=args['stock'])
db.session.add(product)
db.session.commit()
return {'id': product.id}

更新商品库存

python
class ProductUpdateStock(Resource):
def put(self, product_id):
parser = reqparse.RequestParser()
parser.add_argument('stock', type=int, required=True)
args = parser.parse_args()
product = Product.query.get(product_id)
if product:
product.stock = args['stock']
db.session.commit()
return {'message': 'Stock updated successfully'}
return {'message': 'Product not found'}, 404

订单状态同步

创建订单

python
class OrderCreate(Resource):
def post(self):
parser = reqparse.RequestParser()
parser.add_argument('user_id', type=int, required=True)
parser.add_argument('product_ids', type=list, required=True)
args = parser.parse_args()
order = Order(user_id=args['user_id'], status='pending')
db.session.add(order)
db.session.commit()
for product_id in args['product_ids']:
product = Product.query.get(product_id)
if product and product.stock > 0:
order_detail = OrderDetail(order_id=order.id, product_id=product.id, quantity=1)
db.session.add(order_detail)
product.stock -= 1
else:
return {'message': f'Product {product_id} is out of stock'}, 400
db.session.commit()
return {'id': order.id}

获取订单详情

python
class OrderDetail(Resource):
def get(self, order_id):
order = Order.query.get(order_id)
if order:
order_details = OrderDetail.query.filter(OrderDetail.order_id == order_id).all()
return {
'order_id': order.id,
'user_id': order.user_id,
'status': order.status,
'details': [
{
'product_id': detail.product_id,
'product_name': Product.query.get(detail.product_id).name,
'quantity': detail.quantity
} for detail in order_details
]
}
return {'message': 'Order not found'}, 404

更新订单状态

python
class OrderUpdateStatus(Resource):
def put(self, order_id):
parser = reqparse.RequestParser()
parser.add_argument('status', type=str, required=True)
args = parser.parse_args()
order = Order.query.get(order_id)
if order:
order.status = args['status']
db.session.commit()
return {'message': 'Order status updated successfully'}
return {'message': 'Order not found'}, 404

物流追踪

获取物流信息

python
class LogisticsGet(Resource):
def get(self, order_id):
logistics = Logistics.query.filter(Logistics.order_id == order_id).order_by(Logistics.updated_at.desc()).all()
return {
'order_id': order_id,
'logistics': [
{'status': logistics.status, 'updated_at': logistics.updated_at} for logistics in logistics
]
}

总结

本文使用 Flask-RESTful 框架和 Python 语言,实现了生鲜电商 API 的商品库存管理、订单状态同步和物流追踪功能。通过以上代码,我们可以构建一个高效、稳定的生鲜电商 API,满足企业对商品库存、订单状态和物流信息的管理需求。

在实际应用中,我们还可以根据业务需求,添加更多功能,如用户管理、支付接口、促销活动等。为了提高 API 的性能和安全性,我们还可以考虑使用缓存、限流、鉴权等技术。希望本文能对您有所帮助。