From 5fcd6b701730b68c7497b62aa549143b8a17536b Mon Sep 17 00:00:00 2001 From: superlishunqin <852326703@qq.com> Date: Fri, 4 Jul 2025 19:07:35 +0800 Subject: [PATCH] online_shopping_07_04 --- .gitignore | 178 + README.md | 211 + app/__init__.py | 95 + app/forms.py | 128 + app/models/__init__.py | 18 + app/models/address.py | 79 + app/models/admin.py | 52 + app/models/cart.py | 136 + app/models/operation_log.py | 57 + app/models/order.py | 182 + app/models/payment.py | 68 + app/models/product.py | 265 + app/models/review.py | 64 + app/models/user.py | 50 + app/models/verification.py | 61 + app/static/css/address_form.css | 96 + app/static/css/addresses.css | 79 + app/static/css/admin_base.css | 117 + app/static/css/admin_categories.css | 155 + app/static/css/admin_dashboard.css | 39 + app/static/css/admin_login.css | 82 + app/static/css/admin_profile.css | 231 + app/static/css/auth.css | 65 + app/static/css/base.css | 47 + app/static/css/cart.css | 26 + app/static/css/checkout.css | 46 + app/static/css/index.css | 68 + app/static/css/order_detail.css | 80 + app/static/css/orders.css | 160 + app/static/css/pay.css | 49 + app/static/css/product_detail.css | 71 + app/static/css/product_list.css | 14 + app/static/css/profile.css | 231 + app/static/css/register.css | 36 + app/static/js/address_form.js | 229 + app/static/js/addresses.js | 64 + app/static/js/admin_categories.js | 276 + app/static/js/admin_dashboard.js | 80 + app/static/js/base.js | 76 + app/static/js/cart.js | 219 + app/static/js/checkout.js | 114 + app/static/js/city_data.js | 466 + app/static/js/order_detail.js | 49 + app/static/js/orders.js | 109 + app/static/js/pay.js | 200 + app/static/js/product_detail.js | 236 + app/static/js/product_list.js | 6 + app/static/js/profile.js | 343 + app/static/js/register.js | 116 + app/static/uploads/.gitkeep | 0 app/templates/admin/base.html | 123 + app/templates/admin/categories.html | 326 + app/templates/admin/dashboard.html | 207 + app/templates/admin/login.html | 69 + app/templates/admin/orders.html | 0 app/templates/admin/product_form.html | 859 ++ app/templates/admin/products.html | 441 + app/templates/admin/profile.html | 138 + app/templates/admin/users.html | 0 app/templates/base.html | 161 + app/templates/cart/index.html | 192 + app/templates/common/footer.html | 0 app/templates/common/header.html | 0 app/templates/common/pagination.html | 0 app/templates/index.html | 227 + app/templates/order/checkout.html | 224 + app/templates/order/detail.html | 253 + app/templates/order/pay.html | 122 + app/templates/product/detail.html | 374 + app/templates/product/list.html | 280 + app/templates/test_upload.html | 378 + app/templates/user/address_form.html | 150 + app/templates/user/addresses.html | 119 + app/templates/user/login.html | 64 + app/templates/user/orders.html | 230 + app/templates/user/profile.html | 234 + app/templates/user/register.html | 117 + app/utils/__init__.py | 0 app/utils/auth.py | 0 app/utils/cos_client.py | 274 + app/utils/cos_upload.py | 0 app/utils/database.py | 36 + app/utils/decorators.py | 312 + app/utils/email_service.py | 75 + app/utils/file_upload.py | 428 + app/utils/helpers.py | 0 app/utils/sms.py | 0 app/utils/wechat_pay.py | 0 app/views/__init__.py | 0 app/views/address.py | 220 + app/views/admin.py | 249 + app/views/auth.py | 141 + app/views/cart.py | 245 + app/views/main.py | 186 + app/views/order.py | 340 + app/views/payment.py | 212 + app/views/product.py | 667 + app/views/upload.py | 185 + app/views/user.py | 37 + check_avatar.py | 29 + config/__init__.py | 0 config/config.py | 63 + config/cos_config.py | 99 + config/database.py | 25 + create_admin.py | 187 + create_sample_categories.py | 111 + create_sample_specs.py | 68 + create_test_order.py | 82 + create_test_user.py | 72 + docker/.dockerignore | 0 docker/Dockerfile | 0 docker/docker-compose.yml | 0 export_code.py | 305 + project_code_export_20250704_033545.txt | 15860 ++++++++++++++++++++++ requirements.txt | 13 + run.py | 7 + test_cos_connection.py | 218 + test_db_connection.py | 120 + test_email_detailed.py | 260 + 119 files changed, 32333 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app/__init__.py create mode 100644 app/forms.py create mode 100644 app/models/__init__.py create mode 100644 app/models/address.py create mode 100644 app/models/admin.py create mode 100644 app/models/cart.py create mode 100644 app/models/operation_log.py create mode 100644 app/models/order.py create mode 100644 app/models/payment.py create mode 100644 app/models/product.py create mode 100644 app/models/review.py create mode 100644 app/models/user.py create mode 100644 app/models/verification.py create mode 100644 app/static/css/address_form.css create mode 100644 app/static/css/addresses.css create mode 100644 app/static/css/admin_base.css create mode 100644 app/static/css/admin_categories.css create mode 100644 app/static/css/admin_dashboard.css create mode 100644 app/static/css/admin_login.css create mode 100644 app/static/css/admin_profile.css create mode 100644 app/static/css/auth.css create mode 100644 app/static/css/base.css create mode 100644 app/static/css/cart.css create mode 100644 app/static/css/checkout.css create mode 100644 app/static/css/index.css create mode 100644 app/static/css/order_detail.css create mode 100644 app/static/css/orders.css create mode 100644 app/static/css/pay.css create mode 100644 app/static/css/product_detail.css create mode 100644 app/static/css/product_list.css create mode 100644 app/static/css/profile.css create mode 100644 app/static/css/register.css create mode 100644 app/static/js/address_form.js create mode 100644 app/static/js/addresses.js create mode 100644 app/static/js/admin_categories.js create mode 100644 app/static/js/admin_dashboard.js create mode 100644 app/static/js/base.js create mode 100644 app/static/js/cart.js create mode 100644 app/static/js/checkout.js create mode 100644 app/static/js/city_data.js create mode 100644 app/static/js/order_detail.js create mode 100644 app/static/js/orders.js create mode 100644 app/static/js/pay.js create mode 100644 app/static/js/product_detail.js create mode 100644 app/static/js/product_list.js create mode 100644 app/static/js/profile.js create mode 100644 app/static/js/register.js create mode 100644 app/static/uploads/.gitkeep create mode 100644 app/templates/admin/base.html create mode 100644 app/templates/admin/categories.html create mode 100644 app/templates/admin/dashboard.html create mode 100644 app/templates/admin/login.html create mode 100644 app/templates/admin/orders.html create mode 100644 app/templates/admin/product_form.html create mode 100644 app/templates/admin/products.html create mode 100644 app/templates/admin/profile.html create mode 100644 app/templates/admin/users.html create mode 100644 app/templates/base.html create mode 100644 app/templates/cart/index.html create mode 100644 app/templates/common/footer.html create mode 100644 app/templates/common/header.html create mode 100644 app/templates/common/pagination.html create mode 100644 app/templates/index.html create mode 100644 app/templates/order/checkout.html create mode 100644 app/templates/order/detail.html create mode 100644 app/templates/order/pay.html create mode 100644 app/templates/product/detail.html create mode 100644 app/templates/product/list.html create mode 100644 app/templates/test_upload.html create mode 100644 app/templates/user/address_form.html create mode 100644 app/templates/user/addresses.html create mode 100644 app/templates/user/login.html create mode 100644 app/templates/user/orders.html create mode 100644 app/templates/user/profile.html create mode 100644 app/templates/user/register.html create mode 100644 app/utils/__init__.py create mode 100644 app/utils/auth.py create mode 100644 app/utils/cos_client.py create mode 100644 app/utils/cos_upload.py create mode 100644 app/utils/database.py create mode 100644 app/utils/decorators.py create mode 100644 app/utils/email_service.py create mode 100644 app/utils/file_upload.py create mode 100644 app/utils/helpers.py create mode 100644 app/utils/sms.py create mode 100644 app/utils/wechat_pay.py create mode 100644 app/views/__init__.py create mode 100644 app/views/address.py create mode 100644 app/views/admin.py create mode 100644 app/views/auth.py create mode 100644 app/views/cart.py create mode 100644 app/views/main.py create mode 100644 app/views/order.py create mode 100644 app/views/payment.py create mode 100644 app/views/product.py create mode 100644 app/views/upload.py create mode 100644 app/views/user.py create mode 100644 check_avatar.py create mode 100644 config/__init__.py create mode 100644 config/config.py create mode 100644 config/cos_config.py create mode 100644 config/database.py create mode 100644 create_admin.py create mode 100644 create_sample_categories.py create mode 100644 create_sample_specs.py create mode 100644 create_test_order.py create mode 100644 create_test_user.py create mode 100644 docker/.dockerignore create mode 100644 docker/Dockerfile create mode 100644 docker/docker-compose.yml create mode 100644 export_code.py create mode 100644 project_code_export_20250704_033545.txt create mode 100644 requirements.txt create mode 100644 run.py create mode 100644 test_cos_connection.py create mode 100644 test_db_connection.py create mode 100644 test_email_detailed.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a265cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,178 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Flask stuff: +instance/ +.webassets-cache + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +Pipfile.lock + +# poetry +poetry.lock + +# Environments (保留配置文件,只排除本地环境变量) +.env.local +.env.development +.env.test + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# IDE +.idea/ +.vscode/ +*.swp +*.swo +*~ + +# 操作系统 +.DS_Store +.AppleDouble +.LSOverride +Thumbs.db +ehthumbs.db +Desktop.ini +$RECYCLE.BIN/ +*.cab +*.msi +*.msix +*.msm +*.msp +*.lnk + +# 虚拟环境 +venv/ +.venv/ +env/ +ENV/ +env.bak/ +venv.bak/ + +# 日志文件 +logs/*.log +*.log + +# 上传文件(用户上传的内容不需要版本控制) +app/static/uploads/* +!app/static/uploads/.gitkeep + +# 数据库文件(如果使用SQLite) +*.db +*.sqlite +*.sqlite3 + +# 临时文件 +temp/ +tmp/ +*.tmp +*.bak +*.backup + +# 测试输出 +test_output/ +test_results/ + +# 缓存文件 +.cache/ + +# 压缩文件 +*.zip +*.tar.gz +*.rar + +# 编译文件 +*.pyc + +# 性能分析 +*.prof + +# 本地开发临时文件 +scratch/ +notes.txt +todo.txt + +# Docker临时文件(保留主要Docker文件) +.dockerignore.bak + +# 部署相关临时文件 +deploy_temp/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..7965521 --- /dev/null +++ b/README.md @@ -0,0 +1,211 @@ + +
本项目为毕业设计作品,旨在展示一个完整的Web应用开发流程。
+作者:林金兴 | 指导老师:[指导老师姓名]
+点击上方的"添加新分类"来创建第一个商品分类
+总用户数
+活跃用户
+管理员数
+7天操作数
+时间 | +操作者 | +操作类型 | +操作内容 | +IP地址 | +
---|---|---|---|---|
{{ log.created_at.strftime('%m-%d %H:%M') if log.created_at else '' }} | ++ {% if log.user_type == 2 %} + 管理员 + {% else %} + 用户 + {% endif %} + {{ log.user_id }} + | +{{ log.action }} | ++ {% if log.resource_type %} + {{ log.resource_type }} + {% if log.resource_id %}#{{ log.resource_id }}{% endif %} + {% else %} + - + {% endif %} + | +{{ log.ip_address or '-' }} | +
+
+ 暂无操作日志
+ |
+
太白购物商城管理后台
+ID | +商品图片 | +商品名称 | +分类 | +价格 | +库存 | +状态 | +销量 | +创建时间 | +操作 | +
---|---|---|---|---|---|---|---|---|---|
{{ product.id }} | +
+ {% if product.main_image %}
+
+
+
+ {% endif %}
+ |
+
+
+ {{ product.name[:40] }}{% if product.name|length > 40 %}...{% endif %}
+ {% if product.brand %}
+
+ {{ product.brand }} + {% endif %} + {% if product.has_specs %} + 多规格 + {% endif %} + |
+ + {{ product.category.name if product.category else '未分类' }} + | +
+ ¥{{ "%.2f"|format(product.price) }}
+ {% if product.original_price and product.original_price > product.price %}
+ + ¥{{ "%.2f"|format(product.original_price) }} + + {% endif %} + |
+
+ {% set total_stock = product.inventory|sum(attribute='stock') if product.inventory else 0 %}
+ {% set sku_count = product.inventory|length if product.inventory else 0 %}
+
+
+
+ {{ total_stock }}
+
+ {% if sku_count > 1 %}
+
+ {{ sku_count }}个SKU + {% endif %} + {% if total_stock <= 0 %} + 缺货 + {% elif total_stock <= 10 %} + 库存不足 + {% endif %} + |
+ + {% if product.status == 1 %} + 上架 + {% else %} + 下架 + {% endif %} + | +
+ {{ product.sales_count }}
+ 浏览:{{ product.view_count }}
+ |
+
+
+ {{ product.created_at.strftime('%m-%d') if product.created_at else '' }}
+
+ {{ product.created_at.strftime('%H:%M') if product.created_at else '' }} + |
+
+
+
+ 编辑
+
+ {% if product.inventory %}
+
+ {% endif %}
+
+
+ |
+
+
+
+
+ 暂无商品数据 + {% if search or category_id or status %} + + 清除筛选 + + {% endif %} + |
+
你好,{{ user.nickname or user.username }}!开始您的购物之旅吧!
+ {% else %} +发现优质商品,享受便捷购物体验
+ 立即注册 + {% endif %} +{{ address.receiver_phone }}
+{{ address.get_full_address() }}
+{{ item.spec_combination }}
+ {% endif %} + {% if item.product.brand %} + {{ item.product.brand }} + {% endif %} +{{ order.created_at.strftime('%Y-%m-%d %H:%M:%S') }}
+已完成
+ {% else %} +请在15分钟内完成支付
+ {% endif %} +{{ order.shipped_at.strftime('%Y-%m-%d %H:%M:%S') if order.shipped_at else '已发货' }}
+ {% else %} +等待卖家发货
+ {% endif %} +{{ order.received_at.strftime('%Y-%m-%d %H:%M:%S') if order.received_at else '已确认收货' }}
+ {% else %} +等待买家确认收货
+ {% endif %} +交易成功
+ {% else %} +等待交易完成
+ {% endif %} +{{ item.spec_combination }}
+ {% endif %} + 单价:¥{{ "%.2f"|format(item.price) }} +请使用微信扫描二维码完成支付
+正在跳转到支付宝...
+正在跳转到网银...
++ 品牌:{{ product.brand }} +
+ {% endif %} + + +暂无详细描述
+ {% endif %} +商品名称 | +{{ product.name }} | +
商品品牌 | +{{ product.brand }} | +
商品分类 | +{{ product.category.name }} | +
商品重量 | +{{ product.weight }}kg | +
上架时间 | +{{ product.created_at.strftime('%Y-%m-%d') }} | +
库存信息 | ++ {% if inventory_list|length == 1 %} + {{ inventory_list[0].stock }}件 + {% else %} + 多规格商品,请选择具体规格查看库存 + {% endif %} + | +
评价功能开发中...
+{{ product.brand }}
+ {% endif %} +{{ address.receiver_phone }}
++ + {{ address.get_full_address() }} +
+ {% if address.postal_code %} ++ 邮编:{{ address.postal_code }} +
+ {% endif %} +还没有账户? 立即注册
+{{ item.spec_combination }}
+ {% endif %} +您还没有任何订单,快去购物吧!
+ + 去购物 + +用户名: | +{{ user.username }} | +
昵称: | +{{ user.nickname or '未设置' }} | +
手机号: | +{{ user.phone or '未绑定' }} | +
邮箱: | +{{ user.email or '未绑定' }} | +
性别: | ++ {% if user.gender == 1 %}男 + {% elif user.gender == 2 %}女 + {% else %}未设置 + {% endif %} + | +
注册时间: | +{{ user.created_at.strftime('%Y-%m-%d %H:%M:%S') if user.created_at else '未知' }} | +
已有账户? 立即登录
+您正在进行{type_map.get(code_type, "验证")}操作,验证码为:
+验证码有效期为10分钟,请及时使用。
+如果这不是您的操作,请忽略此邮件。
+此邮件由系统自动发送,请勿回复。
+© 2024 太白购物平台 版权所有
+文件路径: {result['file_key']}
+访问URL: {result['url']}
+点击上方的"添加新分类"来创建第一个商品分类
+总用户数
+活跃用户
+管理员数
+7天操作数
+时间 | +操作者 | +操作类型 | +操作内容 | +IP地址 | +
---|---|---|---|---|
{{ log.created_at.strftime('%m-%d %H:%M') if log.created_at else '' }} | ++ {% if log.user_type == 2 %} + 管理员 + {% else %} + 用户 + {% endif %} + {{ log.user_id }} + | +{{ log.action }} | ++ {% if log.resource_type %} + {{ log.resource_type }} + {% if log.resource_id %}#{{ log.resource_id }}{% endif %} + {% else %} + - + {% endif %} + | +{{ log.ip_address or '-' }} | +
+ 暂无操作日志 + | +
太白购物商城管理后台
+ID | +商品图片 | +商品名称 | +分类 | +价格 | +库存 | +状态 | +销量 | +创建时间 | +操作 | +
---|---|---|---|---|---|---|---|---|---|
{{ product.id }} | +
+ {% if product.main_image %}
+
+
+
+ {% endif %}
+ |
+
+
+ {{ product.name[:40] }}{% if product.name|length > 40 %}...{% endif %}
+ {% if product.brand %}
+
+ {{ product.brand }} + {% endif %} + {% if product.has_specs %} + 多规格 + {% endif %} + |
+ + {{ product.category.name if product.category else '未分类' }} + | +
+ ¥{{ "%.2f"|format(product.price) }}
+ {% if product.original_price and product.original_price > product.price %}
+ + ¥{{ "%.2f"|format(product.original_price) }} + + {% endif %} + |
+
+ {% set total_stock = product.inventory|sum(attribute='stock') if product.inventory else 0 %}
+ {% set sku_count = product.inventory|length if product.inventory else 0 %}
+
+
+
+ {{ total_stock }}
+
+ {% if sku_count > 1 %}
+
+ {{ sku_count }}个SKU + {% endif %} + {% if total_stock <= 0 %} + 缺货 + {% elif total_stock <= 10 %} + 库存不足 + {% endif %} + |
+ + {% if product.status == 1 %} + 上架 + {% else %} + 下架 + {% endif %} + | +
+ {{ product.sales_count }}
+ 浏览:{{ product.view_count }}
+ |
+
+
+ {{ product.created_at.strftime('%m-%d') if product.created_at else '' }}
+
+ {{ product.created_at.strftime('%H:%M') if product.created_at else '' }} + |
+
+
+
+ 编辑
+
+ {% if product.inventory %}
+
+ {% endif %}
+
+
+ |
+
+
+
+
+ 暂无商品数据 + {% if search or category_id or status %} + + 清除筛选 + + {% endif %} + |
+
你好,{{ user.nickname or user.username }}!开始您的购物之旅吧!
+ {% else %} +发现优质商品,享受便捷购物体验
+ 立即注册 + {% endif %} +{{ address.receiver_phone }}
+{{ address.get_full_address() }}
+{{ item.spec_combination }}
+ {% endif %} + {% if item.product.brand %} + {{ item.product.brand }} + {% endif %} +{{ order.created_at.strftime('%Y-%m-%d %H:%M:%S') }}
+已完成
+ {% else %} +请在15分钟内完成支付
+ {% endif %} +{{ order.shipped_at.strftime('%Y-%m-%d %H:%M:%S') if order.shipped_at else '已发货' }}
+ {% else %} +等待卖家发货
+ {% endif %} +{{ order.received_at.strftime('%Y-%m-%d %H:%M:%S') if order.received_at else '已确认收货' }}
+ {% else %} +等待买家确认收货
+ {% endif %} +交易成功
+ {% else %} +等待交易完成
+ {% endif %} +{{ item.spec_combination }}
+ {% endif %} + 单价:¥{{ "%.2f"|format(item.price) }} +请使用微信扫描二维码完成支付
+正在跳转到支付宝...
+正在跳转到网银...
++ 品牌:{{ product.brand }} +
+ {% endif %} + + +暂无详细描述
+ {% endif %} +商品名称 | +{{ product.name }} | +
商品品牌 | +{{ product.brand }} | +
商品分类 | +{{ product.category.name }} | +
商品重量 | +{{ product.weight }}kg | +
上架时间 | +{{ product.created_at.strftime('%Y-%m-%d') }} | +
库存信息 | ++ {% if inventory_list|length == 1 %} + {{ inventory_list[0].stock }}件 + {% else %} + 多规格商品,请选择具体规格查看库存 + {% endif %} + | +
评价功能开发中...
+{{ product.brand }}
+ {% endif %} +{{ address.receiver_phone }}
++ + {{ address.get_full_address() }} +
+ {% if address.postal_code %} ++ 邮编:{{ address.postal_code }} +
+ {% endif %} +还没有账户? 立即注册
+{{ item.spec_combination }}
+ {% endif %} +您还没有任何订单,快去购物吧!
+ + 去购物 + +用户名: | +{{ user.username }} | +
昵称: | +{{ user.nickname or '未设置' }} | +
手机号: | +{{ user.phone or '未绑定' }} | +
邮箱: | +{{ user.email or '未绑定' }} | +
性别: | ++ {% if user.gender == 1 %}男 + {% elif user.gender == 2 %}女 + {% else %}未设置 + {% endif %} + | +
注册时间: | +{{ user.created_at.strftime('%Y-%m-%d %H:%M:%S') if user.created_at else '未知' }} | +
已有账户? 立即登录
+您正在进行{type_map.get(code_type, "验证")}操作,验证码为:
+验证码有效期为10分钟,请及时使用。
+如果这不是您的操作,请忽略此邮件。
+此邮件由系统自动发送,请勿回复。
+© 2024 太白购物平台 版权所有
+文件路径: {result['file_key']}
+访问URL: {result['url']}
+