当前位置: 首页 > news >正文

Flask简介与安装以及实现一个糕点店的简单流程

目录

1. Flask简介

1.1 Flask的核心特点

1.2 Flask的基本结构

1.3 Flask的常见用法

1.3.1 创建Flask应用

1.3.2 路由和视图函数

1.3.3 动态URL参数

1.3.4 使用模板

1.4 Flask的优点

1.5 总结

2. Flask 环境创建

2.1 创建虚拟环境

2.2 激活虚拟环境

1.3 安装Flask

1.4 创建Flask应用

1.5 运行Flask应用

1.6 管理虚拟环境依赖

1.7 退出虚拟环境

1.8 总结

3. Flask 开发糕点网站的完整基础环境开发流程

3.1 基础开发环境

3.2 创建文件夹,建立环境

3.2.1 创建文件夹Flask,在Flask下面创建cake_shop

3.3.2 建立虚拟环境

3.3 安装必要的 Python 库

3.4 配置数据库连接

3.4.1 配置 MySQL

3.4.2 配置 Flask 与 MySQL 的连接

3.5 创建 Flask 应用结构

3.5.1 创建必要文件

3.6 配置 Flask 与数据库连接检查

3.6.1 配置文件 (config.py)

3.6.2 在 app.py 进行数据库连接测试

3.6.3 测试数据库连接

3.7 初始化数据库迁移

3.8 创建第一个页面

3.8.1 创建首页视图

3.8.2 配置蓝图

3.8.3 创建模板文件

3.8.4 启动 Flask 应用

3.8.5 测试首页

4.开发后续思路

4.1 开发流程与步骤

4.2 最终目录结构

4.3  开发顺序建议


 

1. Flask简介

1.1 Flask的核心特点

(1)轻量级
Flask本身非常简洁,没有复杂的结构和约定,开发者可以根据项目需要自由选择工具和库。这让Flask成为快速开发的理想选择。

(2)灵活性
Flask不强制使用特定的数据库、模板引擎、表单库或其他工具。你可以根据项目需求选择不同的扩展和工具。

(3)内置开发服务器和调试器
Flask自带了一个开发服务器,可以在本地开发时快速查看应用效果。此外,它也提供了调试工具,能在应用出现错误时提供详细的错误信息。

(4)Jinja2模板引擎
Flask集成了Jinja2模板引擎,使得你可以将动态内容与HTML代码分离,方便管理和渲染网页。

(5)请求和响应
Flask提供了丰富的功能来处理HTTP请求,包括表单提交、URL参数、JSON数据等。它还提供了响应功能,可以自定义返回内容(如HTML、JSON、文件等)。

(6)扩展性
虽然Flask是一个微框架,但它有丰富的扩展库支持,可以通过安装第三方库来实现数据库连接、用户认证、表单验证等功能。

1.2 Flask的基本结构

一个最简单的Flask应用通常包含以下几个部分:

  1. Flask实例:用于创建Flask应用的对象。
  2. 路由:定义URL路径和视图函数之间的关系。
  3. 视图函数:处理特定路由的请求,并返回响应。
  4. 模板:用来渲染HTML页面的模板引擎。

1.3 Flask的常见用法

1.3.1 创建Flask应用

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(debug=True)

1.3.2 路由和视图函数

Flask通过@app.route()装饰器来定义路由。例如:

@app.route('/about')
def about():return "This is the About page."

1.3.3 动态URL参数

你可以在URL中使用动态参数,例如:

@app.route('/user/<username>')
def user_profile(username):return f"Hello, {username}!"

1.3.4 使用模板

Flask集成了Jinja2模板引擎,可以将动态内容与HTML分离:

<!-- templates/hello.html -->
<!DOCTYPE html>
<html><head><title>Hello</title></head><body><h1>Hello, {{ name }}!</h1></body>
</html>

在视图函数中渲染模板:

from flask import render_template@app.route('/hello/<name>')
def hello(name):return render_template('hello.html', name=name)

 

1.4 Flask的优点

  • 简洁易用:Flask的代码结构简单,入门容易。
  • 灵活性高:开发者可以选择任何想用的库和工具。
  • 广泛的社区支持:Flask有大量的文档、教程以及开源扩展,可以方便地进行项目开发。

1.5 总结

Flask是一个非常适合入门的Web框架,提供了灵活的功能和简单的API。如果你希望开发小型应用,或者想快速搭建一个Web原型,Flask无疑是一个很好的选择。随着项目的复杂性增加,你还可以利用Flask的扩展来增加所需的功能。

 

2. Flask 环境创建

2.1 创建虚拟环境

首先,确保你的系统中已安装pythonpip。然后,进入你的项目目录,打开终端并输入以下命令来创建一个虚拟环境。

对于Windows:

python -m venv venv

对于Mac/Linux:

python3 -m venv venv

这个命令会在你的项目文件夹中创建一个名为venv的目录,用于存放虚拟环境的所有文件。

2.2 激活虚拟环境

对于Windows:

.\venv\Scripts\activate

对于Mac/Linux:

source venv/bin/activate

激活后,你应该会看到命令行前面有一个(venv)的标记,表示虚拟环境已成功激活。

1.3 安装Flask

在虚拟环境中,使用pip安装Flask:

pip install flask

1.4 创建Flask应用

按照之前提到的步骤,创建一个Flask应用。比如,创建一个名为app.py的文件,并编写以下内容:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(debug=True)

1.5 运行Flask应用

在虚拟环境激活的情况下,运行你的Flask应用:

python app.py

你应该可以在浏览器中访问http://127.0.0.1:5000/看到Flask应用的欢迎信息。

1.6 管理虚拟环境依赖

当你在虚拟环境中安装了其他依赖包时,可以使用pip freeze命令将它们导出到一个requirements.txt文件中,这样其他开发者或者你自己在不同的机器上也能轻松安装相同的依赖:

pip freeze > requirements.txt

其他开发者可以通过以下命令来安装所有依赖:

pip install -r requirements.txt

1.7 退出虚拟环境

当你完成开发时,可以通过以下命令退出虚拟环境:

deactivate

这会返回到系统的Python环境。

1.8 总结

  1. 创建虚拟环境:python -m venv venv
  2. 激活虚拟环境:source venv/bin/activate (Mac/Linux) 或 .\venv\Scripts\activate (Windows)
  3. 安装Flask:pip install flask
  4. 运行Flask应用:python app.py
  5. 管理依赖:pip freeze > requirements.txt

 

3. Flask 开发糕点网站的完整基础环境开发流程

3.1 基础开发环境

开发软件:visual studio code

python:3.12.3

数据库:mysql 8.0

3.2 创建文件夹,建立环境

3.2.1 创建文件夹Flask,在Flask下面创建cake_shop

3.3.2 建立虚拟环境

创建虚拟环境

在您的项目目录中创建一个虚拟环境:

cd D:\projects\Flask\cake_shop # 进入您的项目目录

python -m venv venv # 创建虚拟环境

激活虚拟环境:

Windows:

.\venv\Scripts\activate

Mac/Linux:

source venv/bin/activate

3.3 安装必要的 Python 库

在虚拟环境中安装 Flask 和 MySQL 相关库:

pip install flask flask-mysqldb flask-sqlalchemy flask-migrate

  • Flask-MySQLdb:这是一个用于 Flask 与 MySQL 数据库连接的库。它封装了 MySQLdb 的接口,使得你能够在 Flask 中直接操作 MySQL 数据库。通过它,你可以执行 SQL 查询,增、删、改、查数据库内容。

  • Flask-SQLAlchemy:Flask-SQLAlchemy 是 Flask 与 SQLAlchemy 的集成扩展。SQLAlchemy 是 Python 中非常流行的 ORM(对象关系映射)工具,它简化了数据库交互,允许你通过 Python 类来操作数据库,而无需直接写 SQL 查询。Flask-SQLAlchemy 提供了对 SQLAlchemy 的简化支持,使得与数据库的交互更加方便。

  • Flask-Migrate:Flask-Migrate 是 Flask 的一个数据库迁移库,基于 Alembic。它用于数据库结构变更时进行版本控制,简化数据库迁移的过程。当你修改了数据库模型之后,Flask-Migrate 可以帮助你生成迁移脚本,并应用到数据库中,以保持数据库结构与代码的一致性。

3.4 配置数据库连接

3.4.1 配置 MySQL

首先,确保 MySQL 数据库中已创建数据库:

CREATE DATABASE cake_shop;

表代码参考:

-- 用户表(包含头像字段)
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,        -- 主键username VARCHAR(50) NOT NULL UNIQUE,     -- 用户名,唯一password VARCHAR(255) NOT NULL,           -- 密码(加密存储)email VARCHAR(100) NOT NULL UNIQUE,       -- 邮箱avatar_url VARCHAR(255),                  -- 用户头像 URLrole ENUM('admin', 'user') DEFAULT 'user',-- 用户角色(管理员或普通用户)created_at DATETIME DEFAULT CURRENT_TIMESTAMP -- 创建时间
);-- 糕点分类表
CREATE TABLE categories (id INT AUTO_INCREMENT PRIMARY KEY,        -- 主键name VARCHAR(50) NOT NULL UNIQUE,         -- 分类名称description TEXT                          -- 分类描述
);-- 糕点表
CREATE TABLE products (id INT AUTO_INCREMENT PRIMARY KEY,        -- 主键name VARCHAR(100) NOT NULL,               -- 糕点名称description TEXT,                         -- 描述price DECIMAL(10, 2) NOT NULL,            -- 单价stock INT NOT NULL DEFAULT 0,             -- 库存数量category_id INT NOT NULL,                 -- 分类 ID(外键)created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间FOREIGN KEY (category_id) REFERENCES categories(id) -- 分类外键
);-- 产品图片表(支持多张图片上传)
CREATE TABLE product_images (id INT AUTO_INCREMENT PRIMARY KEY,        -- 主键product_id INT NOT NULL,                  -- 商品 ID(外键)image_url VARCHAR(255) NOT NULL,          -- 图片 URLcreated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间FOREIGN KEY (product_id) REFERENCES products(id) -- 商品外键
);-- 购物车表
CREATE TABLE cart_items (id INT AUTO_INCREMENT PRIMARY KEY,        -- 主键user_id INT NOT NULL,                     -- 用户 ID(外键)product_id INT NOT NULL,                  -- 商品 ID(外键)quantity INT NOT NULL DEFAULT 1,          -- 数量added_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 添加时间FOREIGN KEY (user_id) REFERENCES users(id),   -- 用户外键FOREIGN KEY (product_id) REFERENCES products(id) -- 商品外键
);-- 订单表
CREATE TABLE orders (id INT AUTO_INCREMENT PRIMARY KEY,        -- 主键user_id INT NOT NULL,                     -- 用户 ID(外键)total_price DECIMAL(10, 2) NOT NULL,      -- 总价status ENUM('pending', 'completed', 'canceled') DEFAULT 'pending', -- 状态created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间FOREIGN KEY (user_id) REFERENCES users(id) -- 用户外键
);-- 订单详情表
CREATE TABLE order_details (id INT AUTO_INCREMENT PRIMARY KEY,        -- 主键order_id INT NOT NULL,                    -- 订单 ID(外键)product_id INT NOT NULL,                  -- 商品 ID(外键)quantity INT NOT NULL,                    -- 数量price DECIMAL(10, 2) NOT NULL,            -- 单价FOREIGN KEY (order_id) REFERENCES orders(id), -- 订单外键FOREIGN KEY (product_id) REFERENCES products(id) -- 商品外键
);-- 评价表
CREATE TABLE reviews (id INT AUTO_INCREMENT PRIMARY KEY,        -- 主键product_id INT NOT NULL,                  -- 商品 ID(外键)user_id INT NOT NULL,                     -- 用户 ID(外键)rating INT NOT NULL CHECK (rating BETWEEN 1 AND 5), -- 评分(1-5 星)comment TEXT,                             -- 评价内容created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间FOREIGN KEY (product_id) REFERENCES products(id), -- 商品外键FOREIGN KEY (user_id) REFERENCES users(id) -- 用户外键
);-- 优惠券表
CREATE TABLE coupons (id INT AUTO_INCREMENT PRIMARY KEY,        -- 主键code VARCHAR(20) NOT NULL UNIQUE,         -- 优惠码discount DECIMAL(5, 2) NOT NULL,          -- 折扣比例(如 0.10 表示 10%)expires_at DATETIME NOT NULL              -- 到期时间
);

3.4.2 配置 Flask 与 MySQL 的连接

在项目中创建一个 config.py 配置文件,并进行配置:

# config.pySQLALCHEMY_DATABASE_URI = 'mysql://your_mysql_user:your_mysql_password@localhost/cake_shop'
SQLALCHEMY_TRACK_MODIFICATIONS = False
SECRET_KEY = 'your_secret_key'

请将 your_mysql_useryour_mysql_password 替换为您的 MySQL 用户名和密码。

SECRET_KEY

Flask 使用 SECRET_KEY 来对 session 数据进行加密。Flask 默认使用一个加密机制将数据存储在浏览器的 cookie 中(即 session)。没有这个密钥,用户的数据将无法正确加密和解密,导致安全风险。

如何生成 SECRET_KEY

  • 手动生成: 您可以使用任何随机生成的字符串(建议使用 32 字节(或更长)长度的 随机字符串,包含字母、数字和符号,以增强安全性。),例如:

    SECRET_KEY = 's3cr3t_r@nd0m_k3y_1234'

  • 使用 Python 生成随机字符串: 如果您希望生成一个更加复杂且随机的密钥,可以使用 Python 的 secrets 库:

    import secrets print(secrets.token_hex(16)) # 生成一个 32 字节的随机密钥

    运行这段代码会生成一个类似于下面的密钥:

    b9f4f8d6c8e9b8a1f7d9f2a3b52d6d56

 

3.5 创建 Flask 应用结构

创建以下项目结构与文件说明:

cake_shop/
├── app/
│   ├── __init__.py         # 初始化 Flask 应用
│   ├── models.py           # 数据库模型
│   ├── routes/             # 路由文件夹
│   │   ├── __init__.py
│   │   ├── auth.py         # 用户认证
│   │   └── products.py     # 商品管理
│   ├── templates/          # HTML 模板文件
│   └── static/             # 静态文件(CSS、JS、图片)
├── config.py               # 配置文件
├── requirements.txt        # 项目依赖
├── run.py                  # 启动文件
└── README.md               # 项目说明,不上传github不用创建

3.5.1 创建必要文件

在项目目录中,手动创建目录和文件(命令创建不识别touch,需要手动创建)。

例如:

mkdir app
mkdir app/routes
mkdir app/templates
mkdir app/static
touch app/__init__.py
touch app/models.py
touch app/routes/__init__.py
touch app/routes/auth.py
touch app/routes/products.py
touch run.py
touch config.py
touch requirements.txt

3.6 配置 Flask 与数据库连接检查

3.6.1 配置文件 (config.py)

首先,在config.py 文件,用于存放数据库配置、密钥配置等信息。

# config.py# 配置数据库 URI,连接 MySQL 数据库
SQLALCHEMY_DATABASE_URI = 'mysql://your_mysql_user:your_mysql_password@localhost/cake_shop'# 关闭 Flask SQLAlchemy 的修改跟踪功能,减少内存消耗
SQLALCHEMY_TRACK_MODIFICATIONS = False# 设置一个随机密钥用于加密session和CSRF令牌
SECRET_KEY = 'your_secret_key'  # 这里的密钥可以手动生成一个随机的字符串

说明:

  • SQLALCHEMY_DATABASE_URI: 配置连接 MySQL 数据库,替换 your_mysql_useryour_mysql_password 为您的 MySQL 用户和密码。
  • SQLALCHEMY_TRACK_MODIFICATIONS: 设置为 False 以禁用 Flask SQLAlchemy 的修改跟踪功能,这样可以节省内存。
  • SECRET_KEY: Flask 使用这个密钥来对 session 数据和 CSRF 令牌进行加密,确保安全性。您可以使用手动生成的随机字符串(如前面提到的使用 secrets 库生成的密钥)。
  • 如何生成 SECRET_KEY
    • 使用 Python 生成随机字符串: 如果您希望生成一个更加复杂且随机的密钥,可以使用 Python 的 secrets 库:

      import secrets print(secrets.token_hex(16)) # 生成一个 32 字节的随机密钥

      运行这段代码会生成一个类似于下面的密钥:

      b9f4f8d6c8e9b8a1f7d9f2a3b52d6d56

    • 手动生成: 您可以使用任何随机生成的字符串(建议使用 32 字节(或更长)长度的 随机字符串,包含字母、数字和符号,以增强安全性。),例如:

      SECRET_KEY = 's3cr3t_r@nd0m_k3y_1234'

3.6.2 在 app.py 进行数据库连接测试

在run.py 文件,内容如下:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import SQLALCHEMY_DATABASE_URI, SQLALCHEMY_TRACK_MODIFICATIONS# 初始化 Flask 应用
app = Flask(__name__)# 加载配置
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = SQLALCHEMY_TRACK_MODIFICATIONS# 初始化数据库对象
db = SQLAlchemy(app)# 测试数据库连接
@app.route('/test-db')
def test_db_connection():try:# 尝试连接数据库,查询数据库中的所有表result = db.session.execute('SHOW TABLES;')tables = result.fetchall()return f"Database connected successfully! Tables: {tables}"except Exception as e:return f"Error connecting to database: {e}"if __name__ == '__main__':app.run(debug=True)

3.6.3 测试数据库连接

(1) 启动 Flask 应用

在命令行中运行以下命令启动 Flask 应用:

python app.py

(2) 测试数据库连接

打开浏览器并访问 http://127.0.0.1:5000/test-db,查看是否能够成功连接到数据库并列出数据库中的表。如果数据库连接成功,您会看到类似以下内容:

Database connected successfully! Tables: [('cart_items',), ('categories',), ('coupons',), ('order_details',), ('orders',), ('product_images',), ('products',), ('reviews',), ('users',)]

3.7 初始化数据库迁移

Flask-Migrate 用于数据库结构迁移,首先初始化迁移文件:

flask db init
flask db migrate -m "Initial migration"
flask db upgrade

3.8 创建第一个页面

在创建并配置完数据库连接后,接下来我们可以开发应用的第一个页面。这一部分将指导您如何创建一个简单的首页(例如 home,更多时候是index 页面),并通过 Flask 展示。

3.8.1 创建首页视图

(1)创建 routes 路由文件:

app/routes/ 文件夹中,创建一个新的 Python 文件来定义首页的视图,命名为 home.py

app/routes/home.py 中,我们将定义一个路由,返回一个简单的欢迎页面。

from flask import Blueprint, render_template# 创建蓝图
bp = Blueprint('home', __name__)# 定义主页视图
@bp.route('/')
def home():return render_template('home.html')  # 渲染 home.html 模板

3.8.2 配置蓝图

app/__init__.py 中注册蓝图:

app/__init__.py 文件中,您需要注册 home 蓝图。打开并修改 app/__init__.py,加入对 home 蓝图的注册。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migratedb = SQLAlchemy()
migrate = Migrate()def create_app(config_class='config'):app = Flask(__name__)app.config.from_object(config_class)db.init_app(app)migrate.init_app(app, db)# 注册蓝图from app.routes.home import bp as home_bpapp.register_blueprint(home_bp)return app

 

如果有其他蓝图:

    # 注册各个蓝图from app.routes.home import bp as home_bpfrom app.routes.auth import bp as auth_bpfrom app.routes.products import bp as products_bpapp.register_blueprint(home_bp)  # 注册首页和注册功能app.register_blueprint(auth_bp)  # 注册用户认证功能app.register_blueprint(products_bp)  # 注册商品功能

3.8.3 创建模板文件

app/templates/ 文件夹中创建 home.html

home.html 中,我们可以添加简单的 HTML 代码来展示页面内容。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Welcome to Cake Shop</title>
</head>
<body><h1>Welcome to the Cake Shop!</h1><p>Your favorite place for delicious cakes and pastries.</p>
</body>
</html>

3.8.4 启动 Flask 应用

重新修改 run.py文件

from app import create_appapp = create_app()if __name__ == '__main__':app.run(debug=True)

3.8.5 测试首页

(1)启动 Flask 应用:

运行以下命令来启动 Flask 应用:

python run.py

(2)访问首页:

打开浏览器并访问 http://127.0.0.1:5000/,您应该会看到显示“Welcome to the Cake Shop!”的首页。

4.开发后续思路

4.1 开发流程与步骤

(1)用户模块

  • 功能:实现用户的注册、登录、角色管理、头像管理等。
    • 用户模型:创建数据库模型,保存用户信息(用户名、密码、邮箱、头像等)。
    • 注册和登录功能:处理用户的注册和登录请求,支持用户名、密码验证。
    • 用户会话管理:用户登录后保存其信息(例如,使用session进行会话管理)。
    • 头像上传:支持用户修改头像并上传。

(2)商品模块

  • 功能:实现商品展示、分类、库存管理等功能。
    • 商品模型:创建数据库模型,存储商品信息(名称、描述、价格、库存等)。
    • 商品分类:根据类别展示商品,支持添加、删除和编辑商品分类。
    • 商品展示:展示商品列表、商品详情页等。
    • 商品图片管理:支持商品图片的上传和展示。

(3)购物车模块

  • 功能:实现商品加入购物车、查看购物车、删除购物车商品等功能。
    • 购物车模型:创建购物车项模型,存储用户ID、商品ID和商品数量。
    • 添加到购物车:用户可以将商品添加到购物车,修改数量等。
    • 查看购物车:显示用户已添加到购物车的所有商品。
    • 删除购物车商品:用户可以删除购物车中的商品。

(4)订单模块

  • 功能:实现订单生成、支付、查看历史订单等功能。
    • 订单模型:存储订单信息,包括订单ID、用户ID、总价、状态等。
    • 订单详情:每个订单包含详细的商品信息。
    • 订单状态管理:管理订单的状态(待付款、已完成、已取消等)。
    • 支付功能:实现订单的支付功能(可以模拟支付,或集成第三方支付平台)。

(5)评价模块

  • 功能:用户可以对商品进行评价,留下评分和评论。
    • 评价模型:存储用户评价信息,包括商品ID、评分、评论内容等。
    • 查看评价:展示商品的所有用户评价,按时间、评分等排序。
    • 提交评价:用户在订单完成后可以对购买的商品进行评价。

(6)优惠券模块

  • 功能:为用户提供折扣优惠,用户可在结算时使用优惠券。
    • 优惠券模型:存储优惠券信息(代码、折扣比例、过期时间等)。
    • 领取优惠券:用户可以领取优惠券,系统会检查优惠券是否过期。
    • 使用优惠券:在结算时,用户可以选择使用优惠券来减免部分费用。

4.2 最终目录结构

flask_cake_store/

├── app.py               # Flask应用入口
├── config.py            # 配置文件(数据库连接、密钥等)
├── models.py            # 数据库模型(包括User, Product, Order等)
├── routes.py            # 路由和视图函数(处理请求逻辑)
├── templates/           # HTML模板文件
│   ├── home.html        # 首页模板,展示商品列表
│   ├── login.html       # 用户登录页面
│   ├── product_list.html# 商品列表页面
│   ├── product_detail.html # 商品详情页面
│   ├── cart.html        # 购物车页面
│   ├── order.html       # 订单页面
│   └── review.html      # 商品评价页面
└── static/              # 静态文件(CSS、JS、图片等)
    ├── styles.css       # CSS样式文件
    └── images/          # 图片文件夹(包含商品图片、用户头像等)
 

4.3  开发顺序建议

  1. 用户模块:先实现用户的基本功能(注册、登录、头像管理等)。
  2. 商品模块:实现商品展示、分类、库存管理等功能。
  3. 购物车模块:实现购物车的添加、删除和查看功能。
  4. 订单模块:实现订单生成、查看和支付功能。
  5. 评价模块:实现商品评价和查看评价功能。
  6. 优惠券模块:实现优惠券的管理和使用功能。

 

相关文章:

Flask简介与安装以及实现一个糕点店的简单流程

目录 1. Flask简介 1.1 Flask的核心特点 1.2 Flask的基本结构 1.3 Flask的常见用法 1.3.1 创建Flask应用 1.3.2 路由和视图函数 1.3.3 动态URL参数 1.3.4 使用模板 1.4 Flask的优点 1.5 总结 2. Flask 环境创建 2.1 创建虚拟环境 2.2 激活虚拟环境 1.3 安装Flask…...

【自动化测试】—— Appium使用保姆教程

目录 一. 连接手机 1. 授权 2. 调试 3. 获取参数 二. 启动APP 1. 启动Appium服务 2. 启动Appium Inspector 3. 配置Appium Inspector 三. 功能说明 1. 主菜单功能 2. 快照视图菜单 3. 元素视图菜单 四. 常见问题 1. appPackage有多个设备时 一. 连接手机 1. 授权 首先将手机的开…...

西门子【Library of General Functions (LGF) for SIMATIC S7-1200 / S7-1500】

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 通用函数库 (LGF) 扩展了 TIA Portal 中用于 PLC 编程的 STEP 7 指令&#xff08;数学函数、时间、计数器 等&#xff09;。该库可以不受限制地使用&#xff0c;并包含 FIFO 、搜索功能、矩阵计算、 astro 计…...

IntelliJ IDEA 2023.3 中配置 Spring Boot 项目的热加载

IntelliJ IDEA 2023.3 中配置 Spring Boot 项目的热加载 在 IntelliJ IDEA 2023.3 中配置 Spring Boot 项目的热加载&#xff0c;可以让你在不重启应用的情况下看到代码修改的效果。以下是详细的配置步骤&#xff1a; 添加 spring-boot-devtools 依赖 在 pom.xml 文件中添加 …...

Python----Python高级(正则表达式:语法规则,re库)

一、正则表达式 1.1、概念 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、 regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff0…...

通过Ukey或者OTP动态口令实现windows安全登录

通过 安当SLA&#xff08;System Login Agent&#xff09;实现Windows安全登录认证&#xff0c;是一种基于双因素认证&#xff08;2FA&#xff09;的解决方案&#xff0c;旨在提升 Windows 系统的登录安全性。以下是详细的实现方法和步骤&#xff1a; 1. 安当SLA的核心功能 安…...

Node.js接收文件分片数据并进行合并处理

前言&#xff1a;上一篇文章讲了如何进行文件的分片&#xff1a;Vue3使用多线程处理文件分片任务&#xff0c;那么本篇文章主要看一下后端怎么接收前端上传来的分片并进行合并处理。 目录&#xff1a; 一、文件结构二、主要依赖1. express2. multer3. fs (文件系统模块)4. pat…...

Lsky-Pro在线图片搭建教程(Docker部署方式)

Lsky Pro+ 是一个使用 PHP 语言,采用 Laravel 框架开发的一款 Web 图片管理程序,中文名:兰空图床。如果你需要一个在线图床程序,那么这个开源项目可以帮助到你,部署流程非常简单。本章教程记录如何部署Lsky-Pro。 一、拉取镜像 docker pull halcyonazure/lsky-pro-docke…...

“深入浅出”系列之算法篇:(2)openCV、openMV、openGL

OpenCV是一个的跨平台计算机视觉库,可以运行在Linux囚、Windows 和Mac OS操作系统上。它轻量级而且高效,由一系列 C函数和少量C类构成&#xff0c;同时也提供了Python 接口&#xff0c;实现了图像处理和计算机视觉方面的很多通用算法。 OpenMV是一个开源&#xff0c;低成本&am…...

AI 新动态:技术突破与应用拓展

目录 一.大语言模型的持续进化 二.AI 在医疗领域的深度应用 疾病诊断 药物研发 三.AI 与自动驾驶的新进展 四.AI 助力环境保护 应对气候变化 能源管理 后记 在当下科技迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;无疑是最具影响力的领域之一。AI 技…...

从CRUD到高级功能:EF Core在.NET Core中全面应用(三)

目录 IQueryable使用 原生SQL使用 实体状态跟踪 全局查询筛选器 并发控制使用 IQueryable使用 在EFCore中IQueryable是一个接口用于表示可查询的集合&#xff0c;它继承自IEnumerable但具有一些关键的区别&#xff0c;使得它在处理数据库查询时非常有用&#xff0c;普通集…...

【记录】Jenkins版本及JDK关系介绍的官网地址

Redhat Jenkins Packages...

vue3-json-viewer和vue-json-pretty插件使用,vue3 json数据美化展示

本文介绍vue3如何进行json数据pretty展示 1 vue3-json-viewer 1.1 安装 npm install vue3-json-viewer --save1.2 全局引入 在main.ts中引入&#xff0c;然后直接在组件中使用 import { createApp } from vue import App from ./App.vue import JsonViewer from "vue3…...

python转转商超书籍信息爬虫

1基本理论 1.1概念体系 网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等&#xff0c;可以按照我们设置的规则自动化爬取网络上的信息&#xff0c;这些规则被称为爬虫算法。是一种自动化程序&#xff0c;用于从互联网上抓取数据。爬虫通过模拟浏览器的行为&#xff0c;访问网页并…...

Spring Boot 中的 InitializingBean:Bean 初始化背后的故事

在 Spring Boot 应用中&#xff0c;Bean 的生命周期管理至关重要。InitializingBean 接口允许 Bean 在完成属性注入后执行自定义初始化逻辑。本文将深入探讨 InitializingBean 接口在 Spring Boot 中的应用&#xff0c;揭示其工作原理&#xff0c;并分享一些最佳实践&#xff0…...

微信小程序:实现单选,多选,通过变量控制单选/多选

一、实现单选功能 微信小程序提供了 radio 组件来实现单选功能。radio 组件需要配合 radio-group 使用。 1. WXML 代码 <radio-group bindchange"onRadioChange"><label wx:for"{{items}}" wx:key"id"><radio value"{{it…...

MOS怎样选型,步骤详解

一&#xff1a;选用N沟道还是P沟道   为设计选择正确器件的第一步是决定采用N沟道还是P沟道MOSFET。在典型的功率应用中&#xff0c;当一个MOSFET接地&#xff0c;而负载连接到干线电压上时&#xff0c;该MOSFET就构成了低压侧开关。在低压侧开关中&#xff0c;应采用N沟道M…...

CMake技术细节:解决未定义,提供参数

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

1688 满足跨境业务需求而提供的一组 API 接口

1688 跨境属性接口系列是 1688 开放平台为满足跨境业务需求而提供的一组 API 接口&#xff0c;其中最主要的是1688.item_get : 一&#xff1a;1688.item_get接口 接口功能&#xff1a;主要用于查询 1688 商品的跨境属性&#xff0c;为开发者和商家提供了获取商品跨境关键信息…...

物联网网关Web服务器--CGI开发实例BMI计算

本例子通一个计算体重指数的程序来演示Web服务器CGI开发。 硬件环境&#xff1a;飞腾派开发板&#xff08;国产E2000处理器&#xff09; 软件环境&#xff1a;飞腾派OS&#xff08;Phytium Pi OS&#xff09; 硬件平台参考另一篇博客&#xff1a;国产化ARM平台-飞腾派开发板…...

计算机网络 (51)鉴别

前言 计算机网络鉴别是信息安全领域中的一项关键技术&#xff0c;主要用于验证用户或信息的真实性&#xff0c;以及确保信息的完整性和来源的可靠性。 一、目的与重要性 鉴别的目的是验明用户或信息的正身&#xff0c;对实体声称的身份进行唯一识别&#xff0c;以便验证其访问请…...

【Docker】搭建一个功能强大的自托管虚拟浏览器 - n.eko

前言 本教程基于群晖的NAS设备DS423的docker功能进行搭建&#xff0c;DSM版本为 DSM 7.2.2-72806 Update 2。 n.eko 支持多种类型浏览器在其虚拟环境中运行&#xff0c;本次教程使用 Chromium​ 浏览器镜像进行演示&#xff0c;支持访问内网设备和公网地址。 简介 n.eko 是…...

论文笔记(六十二)Diffusion Reward Learning Rewards via Conditional Video Diffusion

Diffusion Reward Learning Rewards via Conditional Video Diffusion 文章概括摘要1 引言2 相关工作3 前言4 方法4.1 基于扩散模型的专家视频建模4.2 条件熵作为奖励4.3 训练细节 5 实验5.1 实验设置5.2 主要结果5.3 零样本奖励泛化5.4 真实机器人评估5.5 消融研究 6 结论 文章…...

探索 Stable-Diffusion-Webui-Forge:更快的AI图像生成体验

目录 简介&#x1f31f; 主要特点&#x1f4e5; 安装步骤1. 下载2. 配置环境和安装依赖3. 模型目录说明 &#x1f680; 运行 Stable-Diffusion-Webui-Forge1. 进入项目目录2. 运行项目3. 打开页面 &#x1f3a8; 使用体验常见问题&#x1f4dd; 小结 简介 Stable-Diffusion-We…...

Redis使用基础

1 redis介绍 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务 ! 是完全开源的&#xff0c;遵守 BSD 协议&#xff0c;是一个高性能的 key-value 数据库。 使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并…...

PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10

1.环境搭建 硬件环境&#xff1a;CANoe、待测设备&#xff08;包含UDS诊断模块&#xff09; 2.pythonPyCharm环境 pip install robotframework pip install robotframework-ride pip install openpyxl pip install udsoncan pip install python-can pip install can-isotp3…...

【TCP】rfc文档

tcp协议相关rfc有哪些 TCP&#xff08;传输控制协议&#xff09;是一个复杂的协议&#xff0c;其设计和实现涉及多个RFC文档。以下是一些与TCP协议密切相关的RFC文档列表&#xff0c;按照时间顺序排列&#xff0c;涵盖了从基础定义到高级特性和优化的各个方面&#xff1a; 基…...

【SpringCloud】黑马微服务学习笔记

目录 1. 关于微服务 ?1.1 微服务与单体架构的区别 ?1.2 SpringCloud 技术 2. 学习前准备 ?2.1 环境搭建 ?2.2 熟悉项目 3. 正式拆分 ?3.1 拆分商品功能模块 ?3.2 拆分购物车功能模块 4. 服务调用 ?4.1 介绍 ?4.2 RustTemplate?的使用 4.3 服务治理-注册中…...

梯度提升决策树树(GBDT)公式推导

### 逻辑回归的损失函数 逻辑回归模型用于分类问题&#xff0c;其输出是一个概率值。对于二分类问题&#xff0c;逻辑回归模型的输出可以表示为&#xff1a; \[ P(y 1 | x) \frac{1}{1 e^{-F(x)}} \] 其中 \( F(x) \) 是一个线性组合函数&#xff0c;通常表示为&#xff…...

【MySQL】表的基本操作

??表的基本操作 文章目录&#xff1a; 表的基本操作 创建查看表 创建表 查看表结构 表的修改 表的重命名 表的添加与修改 删除表结构 总结 前言&#xff1a; 在数据库中&#xff0c;数据表是存储和组织数据的基本单位&#xff0c;对于数据表的操作是每个程序员需要烂熟…...