flask+mysql购物网站
时间: 2024-12-26 11:26:41 浏览: 8
### 使用 Flask 和 MySQL 构建购物网站
#### 创建项目结构
为了构建一个基于 Flask 和 MySQL 的购物网站,首先需要规划项目的文件夹和文件布局。通常情况下,建议按照如下方式组织:
```
shopping_website/
│── static/ # 存放静态资源 (CSS, JavaScript, 图片等)
│── templates/ # HTML模板文件存放位置
│── __init__.py # 初始化应用程序实例的地方
│── config.py # 配置参数设置
│── models.py # 数据库模型定义
│── routes.py # 路由处理逻辑
└── run.py # 启动服务器入口脚本
```
#### 安装依赖项
确保安装必要的 Python 包来支持 Web 开发工作流以及与 MySQL 进行交互。
```bash
pip install flask pymysql sqlalchemy
```
上述命令会下载并安装 Flask 框架、PyMySQL 适配器以及 SQLAlchemy ORM 工具[^1]。
#### 设置数据库连接
编辑 `config.py` 文件以指定 MySQL 数据库的相关信息,例如主机名、用户名、密码及数据库名称。
```python
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config(object):
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:password@localhost/shopping_db'
SQLALCHEMY_TRACK_MODIFICATIONS = False
```
此部分代码设置了 SQLAlchemy 所需的 URI 字符串以便于后续操作数据库表单[^5]。
#### 设计数据模型
在 `models.py` 中定义商品、订单等相关实体类,并通过继承自 Base 类的方式映射到实际存在的关系型表格里去。
```python
from datetime import datetime
from .extensions import db
class Product(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), nullable=False)
price = db.Column(db.Float(), default=0)
class Order(db.Model):
id = db.Column(db.Integer(), primary_key=True)
created_at = db.Column(db.DateTime(), default=datetime.utcnow)
items = db.relationship('OrderItem', back_populates='order')
class OrderItem(db.Model):
order_id = db.Column(db.ForeignKey('order.id'), primary_key=True)
product_id = db.Column(db.ForeignKey('product.id'), primary_key=True)
quantity = db.Column(db.Integer())
order = db.relationship('Order', back_populates='items')
product = db.relationship('Product')
```
这段示例展示了三个核心对象之间的关联关系——产品(Product),订单(Order)及其明细条目(OrderItem)[^4]。
#### 编写业务逻辑
最后,在 `routes.py` 内实现具体的视图函数用来响应 HTTP 请求;比如展示首页列表、提交购买请求等功能点。
```python
@app.route('/')
def index():
products = Product.query.all()
return render_template('index.html', products=products)
@app.route('/checkout', methods=['POST'])
@login_required
def checkout():
cart_items = session.get('cart') or []
new_order = Order()
for item in cart_items:
prod = Product.query.filter_by(id=item['id']).first_or_404()
order_item = OrderItem(
product=prod,
quantity=int(item['quantity']),
order=new_order
)
db.session.add(order_item)
try:
db.session.commit()
flash("Your purchase was successful!")
del session['cart']
except Exception as e:
db.session.rollback()
raise
return redirect(url_for('.thankyou'))
```
以上片段实现了两个基本功能:一是获取全部商品供前端页面渲染;二是接收来自用户的结账动作并将之保存至持久化存储介质中[^3]。
阅读全文