- [1.需求分析:](#1-----)
- [2.系统功能设计](#2------)
* [1.系统结构功能](#1------)
* [2.系统业务流程](#2------)
* [3.文件夹组织架构](#3-------)
- [3.系统各部分文件分析](#3---------)
* [**1.初始化文件`__init__.py`:**](#--1--------init--py----)
- [1——导入模块:](#1-------)
- [2——实例化SQLAlchemy对象:`db = SQLAlchemy()`](#2-----sqlalchemy----db---sqlalchemy---)
- [3——创建工厂函数app_create(config_name)实现程序实例初始化,以便扩展对象不最初绑定到应用程序app上:](#3--------app-create-config-name---------------------------app--)
* [2.配置文件`config.py`:](#2-----configpy--)
+ [1——创建一个基类Config来保存通用配置](#1--------config-------)
+ [2——创建一个类继承定义的Config类配置DevelopmenttConfig环境下配置](#2------------config---developmenttconfig-----)
+ [3——用一个字典config提供选择](#3-------config----)
* [3.模型文件`models.py`:](#3-----modelspy--)
+ [1——导入模块:](#1--------1)
+ [2——数据模型类:](#2--------)
* [4.`shop.sql`文件:](#4-shopsql----)
* [5.`home`文件](#5-home---)
+ [1——初始化文件`__init__.py`:](#1----------init--py--)
+ [2——**前台表单文件`forms.py`:**](#2-----------formspy----)
+ [3——前台路由文件`views.py`:](#3---------viewspy--)
- [1.导入模块函数:](#1-------)
- [2.注册页面:](#2-----)
- [3.登陆页面:](#3-----)
- [4.首页模块:](#4-----)
- [5.购物车模块:](#5------)
------
# 1.需求分析:
- 具备首页商品轮播功能
- 具备首页商品展示功能,包括展示最新上架商品、打折商品和热门商品等功能
- 具备查看商品详情功能,可以用于展示商品的详细信息
- 具备加入购物车功能,用户可以将商品添加至购物车
- 具备查看购物车功能,用户可以查看购物车中的所有商品,可以更改购买商品的数量,情况购物车等
- 具备填写订单功能,用户可以填写地址信息,用于接收商品
- 具备提交订单功能,用户提史订单后,可以显现支付宝收款的二维码
- 具备查看订单功能,用户提交订单后可以查看订隼详情
- 具备会员管理功能,包括用户注册、登录和退出等
- 具备后台管理商品功能,包括新増商品、编辑商品、删除商品和查看商品排行等
- 具备后台管理会员功能,包括查看会员信息等
- 具备后台管理订单功能,包括查看订单信息等
# 2.系统功能设计
## 1.系统结构功能
**系统结构功能图:**
![系统结构功能图](https://github.com/KikyoWu/Python/blob/master/image/%E7%B3%BB%E7%BB%9F%E7%BB%93%E6%9E%84%E5%8A%9F%E8%83%BD%E5%9B%BE.png)
## 2.系统业务流程
**购物商场业务流程图:**
![商场业务流程图](https://github.com/KikyoWu/Python/blob/master/image/%E5%95%86%E5%9C%BA%E4%B8%9A%E5%8A%A1%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
## 3.文件夹组织架构
**采用模块和包的方式组织程序,文件夹组织架构如下所示:**
![文件夹组织架构图](https://images.cnblogs.com/cnblogs_com/yffxwyy/1858223/o_201008071448%E6%96%87%E4%BB%B6%E5%A4%B9%E7%BB%84%E7%BB%87%E6%9E%B6%E6%9E%84%E5%9B%BE.png)
- 有3个顶层文件夹:
- **app:**Flask程序的包名。该文件夹下还有4个包:`home`(前台),`admin`(后台),`static`(静态文件),`template`(模板文件);app初始化文件`__init__.py`,模型文件`models.py`
- **home(前台):**
- **初始化文件`__init__.py`:**用`home = Blueprint("home",__name__)`定义蓝图,用`import app.home.views`导入前台路由文件
- **前台表单文件`forms.py`:**验证用户注册表单类RegisterForm,用户登录表单类LoginForm,修改密码表单类PasswordForm。继承自FlaskForm类,定义各个表单中每个字段类型和验证规则,以及字段的相关属性等信息。
- **路由文件`vews.py`**:
1. 设置登录路由`"/login/"`,注册路由`("/register/",`退出登录路由`"/logout/"`,修改密码路由`"/modify_password/"`,首页路由`"/"`,商品列表路由`"/goods_list/<int:supercat_id>/"`,商品详情路由`"/goods_detail/<int:id>/"`,搜索功能路由`"/search/"`,添加购物车路由`"/cart_add/"`,清空购物车路由`"/cart_clear/"`,删除购物车中某个商品路由`"/cart_delete/<int:id>/"`,购物车路由`"/shopping_cart/"`,购物车提交订单路由`"/cart_order/"`,删除某个订单路由`"/order_delete/<int:id>/"`,订单详情路由`"/order_list/"`。<!--路由具体地址不定的地方:需要把一些特定的字段标记成 <variable_name> ,将这些特定的字段将作为参数传入到函数中-->
2. 使用方法render_template('hello.html', name=name) 来渲染模板,在 Python 中生成 HTML,显示网页页面
3. 使用redirect(url_for('目录.函数名'))函数在某些路由下执行一些操作后重定向用户到其它地方,构建一个 URL 来匹配一个特定的函数可以使用 from flask import url_for方法。它接受函数名作为第一个参数,以及一些关键字参数,每一个关键字参数对应于 URL 规则的变量部分。未知变量部分被插入到 URL 中作为查询参数
4. 调用`home.__init__.py`(初始化文件)中定义好的蓝图:
```python
from . improt home
@home.route("/")
```
- **static(静态文件):**
- **404:**错误页面
- **home:**前台页面排版css,字体fonts,相关图片images,支付插件js
- **Images:**所有商品图片
- **template(模板文件):**
- 用来响应各个页面的HTML文件
- **`__init__.py`(初始化文件):**
- 实例化SQLAlchemy对象做数据库映射,对数据库进行操作
- 定义app工厂函数create_app():实例化Flask对象,载入并初始化配置文件config,注册前后台蓝图`app.register_blueprint(home_blueprint)`,这样app才能激活蓝图中的路径
- **models.py模型文件:**使用SQLAlchemy进行数据库操作,将所有模型放到一个单独的models模块中,所以需要导入`__init__.py`中实例化的SQLAlchemy对象db,用SQLAlchemy扩展定义会员数据模型`User(db.Model)`,大分类`SuperCat`,子分类`SubCat`,商品`Goods`,购物车`Cart`,订单`Orders`,订单详情`OrdersDetail`.
- **`migrations`数据库迁移文件:**使用
[^Flask-Script]: Manage启动文件中定义的Manager实例调用命令
扩展以命名行的形式生成数据表和启动文件后生成的文件,其命令如下:
```python
python mamage.py db init #创建迁移仓库,首次使用
python mamage.py db migrate #创建迁移脚本
python mamage.py db upgrade #把迁移应用到数据库中
```
- **`venv`虚拟环境:**python运行的虚拟环境,创建并启动虚拟环境后产生,其命令如下:
```python
virtualenv venv #创建venv虚拟环境
source venv/bin/activate #启动venv虚拟环境
```
- **`Requirments.txt:`**列出所有依赖包,便于在其他电脑中重新生成相同的虚拟环境
- **`config.py`配置文件:**定义配置:设置密钥保证会话安全,进行数据库修改跟踪,连接数据库,打开环境调试端口
- **`manage.py`启动文件:**用于启动程序以及其他程序任务:
- 实例化应用对象create_app
- 添加Manager实例调用的命令Python shell,make_shell_context()函数在命令行获取上下文,和所有和数据库相关的命令MigrateComman,将实例对象传入Manager追踪所有的在命令中调用的命令和处理过程的调用运行情况
- 定义应用404找不到内容时的路由
- 启动Manger实例接受命令�