使用 Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统,实际应用中你可能需要根据具体需求进一步完善和扩展它。
一、安装依赖
首先确保已经安装了Flask、SQLAlchemy(用于数据库操作)等相关库。
pip install flask sqlalchemy
二、数据库模型定义(使用 SQLite 数据库示例,你可以替换为其他数据库)
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///proxy_shopping.db' # 数据库连接字符串 db = SQLAlchemy(app) # 商品模型,代表代购的商品信息 class Product(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) description = db.Column(db.Text) price = db.Column(db.Float, nullable=False) stock = db.Column(db.Integer, default=0) # 用户模型,代表使用代购系统的用户 class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50), unique=True, nullable=False) password = db.Column(db.String(100), nullable=False) email = db.Column(db.String(100)) # 订单模型,代表用户下单的记录 class Order(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) product_id = db.Column(db.Integer, db.ForeignKey('product.id'), nullable=False) quantity = db.Column(db.Integer, nullable=False) order_date = db.Column(db.DateTime, default=datetime.utcnow) user = db.db.relationship('User', backref=db.backref('orders', lazy=True)) product = db.relationship('Product', backref=db.backref('orders', lazy=True))
三、路由和视图函数实现(部分核心功能)
from flask import render_template, request, redirect, url_for, flash from datetime import datetime @app.route('/') def index(): products = Product.query.all() return render_template('index.html', products=products) @app.route('/product/add', method=['GET', 'POST']) def add_product(): if request.method == 'POST': name = request.form['name'] description = request.form['description'] price = float(request.form['price']) stock = int(request.form['stock']) new_product = Product(name=name, description=description, price=price, stock=stock) db.session.add(new_product) db.session.commit() flash('商品添加成功!') return redirect(url_for('index')) return render_template('add_product.html') @app.route('/product/') def product_detail(product_id): product = Product.query.get(product_id) return render_template('product_detail.html', product=product) @app.route('/user/register', method=['GET', 'POST']) def register_user(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] email = request.form['email'] existing_user = User.query.filter_by(username=username).first() if existing_user: flash('用户名已存在,请重新选择用户名!') return redirect(url_for('register_user')) new_user = User(username=username, password=password, email=email) db.session.add(new_user) db.session.commit() flash('注册成功,请登录!') return redirect(url_for('login')) return render_template('register.html') @app.route('/user/login', method=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] user = User.query.filter_by(username=username, password=password).first() if user: session['user_id'] = user.id return redirect(url_for('index')) else: flash('用户名或密码错误,请重新登录!') return render_template('login.html') @app.route('/order/create', method=['GET', 'POST']) def create_order(): if 'user_id' not in session: return redirect(url_for('login')) user_id = session['user_id'] if request.method == 'POST': product_id = int(request.form['product_id']) quantity = int(request.form['quantity']) product = Product.query.get(product_id) if product.stock < quantity: flash('库存不足,请重新选择数量!') return redirect(url_for('product_detail', product_id=product_id)) new_order = Order(user_id=user_id, product_id=product_id, quantity=quantity) product.stock -= quantity db.session.add(new_order) db.session.commit() flash('订单创建成功!') return redirect(url_for('user_orders')) products = Product.query.all() return render_template('create_order.html', products=products) @app.route('/user/orders') def user_orders(): if 'user_id' not in session: return redirect(url_for('login')) user_id = session['user_id'] orders = Order.query.filter_by(user_id=user_id).all() return render_template('user_orders.html', orders=orders)
四、启动应用
if __name__ == '__main__': app.run(debug=True) 五、前端模板示例(以index.html为例,使用 Jinja2 模板语法,其他模板类似)代购系统 商品列表
- {% for product in products %}
- {{ product.name }} - 价格: {{ product.price }} 元,库存: {{ product.stock }} {% endfor %}
上述代码实现了以下几个主要功能:
商品管理:可以添加代购商品,展示商品详情,包括商品名称、描述、价格、库存等信息。
用户管理:支持用户注册、登录功能,验证用户名是否重复等操作。
订单的管理:已登录用户能创建订单,系统会检查库存是否充足,下单成功后会扣减相应库存,并记录订单信息,用户还可以查看自己的历史订单。
不过这只是一个非常基础的代购系统示例,在实际应用中还需要考虑很多方面,比如:
安全方面:对用户密码进行更安全的加密存储(比如使用bcrypt等库),防止 SQL 注入攻击等安全漏洞,做好数据的验证和过滤。
支付功能:集成合适的支付接口,实现安全的在线支付流程,方便用户支付代购费用。
物流跟踪:与物流系统对接,方便用户查询商品的物流状态等。
界面美化和交互优化:让系统的前端页面更加美观、易用,提升用户体验。
国际化和多语言支持:如果面向不同语言的用户群体,要考虑多语言的展示和交互。
你可以根据实际需求进一步调整和完善代码,使其更符合具体的代购业务场景。