Python 语言结合 Flask 框架来实现一个基础的代购商品管理

代购系统的代码示例,使用 Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统,仅供参考,实际应用中你可能需要根据具体需求进一步完善和扩展它。

一、安装依赖

首先确保已经安装了FlaskSQLAlchemy(用于数据库操作)等相关库。

复制代码
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/<int:product_id>')
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 模板语法,其他模板类似)

复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>代购系统</title>
</head>

<body>
    <h1>商品列表</h1>
    <ul>
        {% for product in products %}
        <li>
            <a href="{{ url_for('product_detail', product_id=product.id) }}">{{ product.name }}</a> - 价格: {{ product.price }} 元,库存: {{ product.stock }}
        </li>
        {% endfor %}
    </ul>
</body>

</html>

上述代码实现了以下几个主要功能:

  1. 商品管理:可以添加代购商品,展示商品详情,包括商品名称、描述、价格、库存等信息。
  2. 用户管理 :支持用户注册、登录功能,验证用户名是否重复等操作。
  3. 订单管理:已登录用户能创建订单,系统会检查库存是否充足,下单成功后会扣减相应库存,并记录订单信息,用户还可以查看自己的历史订单。

不过这只是一个非常基础的代购系统示例,在实际应用中还需要考虑很多方面,比如:

  1. 安全方面:对用户密码进行更安全的加密存储(比如使用bcrypt等库),防止 SQL 注入攻击等安全漏洞,做好数据的验证和过滤。
  2. 支付功能:集成合适的支付接口,实现安全的在线支付流程,方便用户支付代购费用。
  3. 物流跟踪:与物流系统对接,方便用户查询商品的物流状态等。
  4. 界面美化和交互优化:让系统的前端页面更加美观、易用,提升用户体验。
  5. 国际化和多语言支持:如果面向不同语言的用户群体,要考虑多语言的展示和交互。

你可以根据实际需求进一步调整和完善代码,使其更符合具体的代购业务场景。

如何确保代购系统的安全性和用户数据隐私?

如何实现用户身份验证和授权功能?

如何优化代码以提高系统性能?

相关推荐
勇往直前plus6 分钟前
Redis&Python 梳理
数据库·redis·python
千云9 分钟前
100w大表0停机回滚:我们为什么放弃Undo Log,选择表名切换?
数据库·后端·mysql
SXJR10 分钟前
使用docker 部署向量数据库Milvus
数据库·docker·容器·milvus·向量数据库
这个DBA有点耶16 分钟前
时序数据库深度对比:2026 年主流 TSDB 架构演进与选型指南
数据库·sql·云原生·架构·运维开发·时序数据库
计算机安禾26 分钟前
【数据库系统原理】第9篇:SQL的结构化思维:DDL、DML与DCL的职责分离
数据库·sql·oracle
计算机安禾30 分钟前
【数据库系统原理】第12篇:视图机制:外模式在SQL层级的逻辑数据独立性实现
数据库·sql·oracle
前进的李工34 分钟前
MySQL性能优化:索引与子查询实战技巧
数据库·sql·mysql·性能优化
IT龟苓膏40 分钟前
Java 集合进阶:ConcurrentHashMap、HashSet、LinkedHashMap、TreeMap 和 fail-fast 一篇讲清
java·开发语言·jvm
疯狂成瘾者42 分钟前
API Key 生成和鉴权机制:从随机凭证生成到请求拦截校验
数据库·oracle
Volunteer Technology1 小时前
SpringSecurity中的权限管理
java·数据库·servlet