基于Python+Django的蛋糕商城

以下是使用 Python + Django 开发的蛋糕商城项目总体流程

一、项目规划与准备

  1. 需求分析
    • 明确蛋糕商城功能需求,如蛋糕展示、分类浏览、购物车操作、订单处理、用户注册登录及个人信息管理等,确定目标用户群体与使用场景。
  2. 技术选型
    • 确定选用 Python 作为编程语言,因其语法简洁、库丰富。
    • 选择 Django 框架,借助其内置的数据库管理、用户认证、表单处理等强大功能用于 Web 开发。

二、项目搭建

  1. 安装依赖
    • 在激活的虚拟环境中,执行pip install django安装 Django 框架,若需连接特定数据库(如 MySQL),还需安装对应数据库驱动(如mysqlclient)并在settings.py中配置数据库连接信息。
  2. 创建主项目 CookieShop
    • 通过命令django-admin startproject CookieShop生成项目框架,包含manage.pysettings.pyurls.py等核心配置文件。
      django-admin startproject CookieShop

三、创建子项目与应用

  1. 创建应用CookieShopCilent
    • 进入 CookieShop 项目目录,代码如下
      python manage.py startapp CookieShopCilent
      创建子项目,其包含models.pyviews.pytemplates等基础文件。

四、数据库设计与迁移

  1. 定义模型
    • models.py中定义蛋糕模型类,设置蛋糕的属性(如名称、口味、价格、图片等),示例代码:
# 用户表
class User(models.Model):
    username = models.CharField(max_length=45, blank=True)
    password = models.CharField(max_length=45, blank=True)
    name = models.CharField(max_length=45, blank=True)
    email = models.CharField(max_length=45, blank=True)
    phone = models.CharField(max_length=11, blank=True)
    address = models.CharField(max_length=45, blank=True)
    isadmin = models.BooleanField(default=False)
    isvalidate = models.BooleanField(default=False)

# 商品分类表
class Type(models.Model):
    name = models.CharField(max_length=45, blank=True)

# 商品表
class Goods(models.Model):
    name = models.CharField(max_length=45, blank=True)
    cover = models.CharField(max_length=45, blank=True)
    image1 = models.CharField(max_length=45, blank=True)
    image2 = models.CharField(max_length=45, blank=True)
    price = models.FloatField()
    intro = models.CharField(max_length=300, blank=True)
    stock = models.IntegerField()
    type_id = models.IntegerField()

# 推荐栏表
class Recommend(models.Model):
    type = models.IntegerField()
    goods_id = models.IntegerField()

# 订单表
class Order(models.Model):
    total = models.FloatField()
    amount = models.IntegerField()
    status = models.SmallIntegerField()
    paytype = models.SmallIntegerField()
    name = models.CharField(max_length=45, blank=True)
    phone = models.CharField(max_length=45, blank=True)
    address = models.CharField(max_length=45, blank=True)
    datetime = model.DateTimeField()
    user_id = models.IntegerField()

# 子订单表
class Orderitem(models.Model):
    price = models.FloatField()
    amount = models.IntegerField()
    goods_id = models.IntegerField()
    order_id = models.IntegerField()

# 购物车表
class ShoppingCar(models.Model):
    userId = models.IntegerField()
    goodsId = models.IntegerField()
    goodsNumber = models.IntegerField()

  1. 执行数据库迁移
    • 每次定义或修改模型后,在项目根目录依次执行python manage.py makemigrations生成迁移文件,再执行python manage.py migrate将迁移文件应用到数据库,创建或更新相应表结构。
      python manage.py makemigrations
      python manage.py migrate

五、启动开发服务器

在项目根目录下的命令行终端中,执行以下命令来启动 Django 的开发服务器:

python manage.py runserver
  • 启动成功后,你会在命令行终端中看到类似如下的输出信息:
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
October 29, 2024 - 17:28:05
Django version 4.2.5, using settings 'your_project_name.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
  • 这表示开发服务器已经成功启动,你可以在浏览器中访问http://127.0.0.1:8000/来查看你的项目首页(如果已经开发了相应的视图和模板来展示首页内容)。

六、项目部分代码及页面展示

        1、首页(index.html)页面代码

<!DOCTYPE html>
<html>
<head>
{#    加载static文件#}
    {% load static %}
    <title>首页</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
    <link type="text/css" rel="stylesheet" href="{% static 'css/style.css' %}">
    <script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
    <script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
    <script type="text/javascript" src="{% static 'js/cart.js' %}"></script>
    <script type="text/javascript" src="{% static 'layer/layer.js' %}"></script>
</head>
<body>
<!--header-->
{# include关键字表示将外部的html文件导入进来 #}
{# with关键字表示后面需要传递数据 #}
{# flag表示头部中哪一个导航栏为高亮状态 1表示首页这个选项变为高亮状态#}
{# 因为头部导航栏中有各商品分类选项,当用户点击商品分类选项需要展示所有商品分类#}
{#将从数据库查询的所有商品分类数据传递给header.html#}
{% include "header.html" with flag=1 typelist=typeList %}
<!--banner-->

<div class="banner">
    <!-- 根据查询的结果显示对话框 -->
    {% if request.session.msg %}
        <div class="alert alert-success">{{ request.session.msg }}</div>
    {% endif %}
    {% if request.session.failMsg %}
        <div class="alert alert-danger">{{ request.session.failMsg }}</div>
    {% endif %}
    <div class="container">
        <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
            <!-- Indicators -->
            <ol class="carousel-indicators" id="olnum">
                <!-- 根据条幅中的商品数量生成小圆点 -->
                {% for g in scroll %}
                    <!-- 判断当前循环是否是第一次循环 -->
                    {% if forloop.first %}
                        <li data-target="#carousel-example-generic"
                            data-slide-to="0" class="active"></li>
                    {% else %}
                        <li data-target="#carousel-example-generic"
                            data-slide-to="{{ forloop.counter0 }}"></li>
                    {% endif %}
                {% endfor %}

            </ol>

            <!-- Wrapper for slides -->
            <div class="carousel-inner" role="listbox" id="lunbotu" style="width: 1242px; height: 432px;">
                {% for g in scroll %}
                    {% if forloop.first %}
                        <div class="item active">
                            <h2 class="hdng"><a href="/goods_detail/?id={{ g.id}}">{{ g.name }}</a><span></span></h2>
                            <p>今日精选推荐</p>
                            <a class="banner_a" href="/goods_buy/?id={{ g.id}}&url=index">加入购物车</a>
                            <div class="banner-text">
                                <a href="/goods_detail/?id={{ g.id }}">
                                    <img src="{% static  g.cover %}" alt="{{g.name }}" width="350" height="350">
                                </a>
                            </div>
                        </div>
                    {% else %}
                        <div class="item">
                            <h2 class="hdng"><a href="/goods_detail/?id={{ g.id}}">{{ g.name }}</a><span></span></h2>
                            <p>今日精选推荐</p>
                            <a class="banner_a" href="/goods_buy/?id={{ g.id}}&url=index">加入购物车</a>
                            <div class="banner-text">
                                <a href="/goods_detail/?id={{ g.id }}">
                                    <img src="{% static  g.cover %}" alt="{{g.name }}" width="350" height="350">
                                </a>
                            </div>
                        </div>
                    {% endif %}
                {% endfor %}

            </div>

        </div>
    </div>
</div>

<!--//banner-->

<div class="subscribe2"></div>

<!--gallery-->
<div class="gallery">
    <div class="container">
        <div class="alert alert-danger">热销推荐</div>
        <div class="gallery-grids">
            {% for g in hotList %}
                <div class="col-md-4 gallery-grid glry-two">
                    <a href="/goods_detail/?id={{ g.id }}">
                        <img src="{% static  g.cover %}" class="img-responsive" alt="{{ g.name }}" width="350"
                             height="350"/>
                    </a>
                    <div class="gallery-info galrr-info-two">
                        <p>
                            <span class="glyphicon glyphicon-eye-open" aria hidden="true"></span>
                            <a href="/goods_detail/?id={{ g.id }}">查看详情</a>
                        </p>
                        <a class="shop" href="/goods_buy/?id={{ g.id}}&url=index">加入购物车</a>
                        <div class="clearfix"></div>
                    </div>
                    <div class="galy-info">
                        <p>{{ g.typeName }} > {{ g.name }}</p>
                        <div class="galry">
                            <div class="prices">
                                <h5 class="item_price">¥ {{ g.price }}</h5>
                            </div>
                            <div class="clearfix"></div>
                        </div>
                    </div>
                </div>
            {% endfor %}

        </div>

        <div class="clearfix"></div>
        <div class="alert alert-info">新品推荐</div>
        <div class="gallery-grids">
             {% for g in newList %}
                <div class="col-md-3 gallery-grid ">
                    <a href="/goods_detail/?id={{ g.id }}">
                        <img src="{% static  g.cover %}" class="img-responsive" alt="{{ g.name }}"/>
                    </a>
                    <div class="gallery-info">
                        <p>
                            <span class="glyphicon glyphicon-eye-open" aria hidden="true"></span>
                            <a href="/goods_detail/?id={{ g.id }}">查看详情</a>
                        </p>
                        <a class="shop" href="/goods_buy/?id={{ g.id}}&url=index">加入购物车</a>
                        <div class="clearfix"></div>
                    </div>
                    <div class="galy-info">
                        <p>{{ g.typeName }} > {{ g.name }}</p>
                        <div class="galry">
                            <div class="prices">
                                <h5 class="item_price">¥ {{ g.price }}</h5>
                            </div>
                            <div class="clearfix"></div>
                        </div>
                    </div>
                </div>
            {% endfor %}


        </div>
    </div>
</div>
<!--//gallery-->

<!--subscribe-->
<div class="subscribe"></div>
<!--//subscribe-->
<!--footer-->

</body>
</html>

2、首页页面展示

3、登入后的页面

七、管理员(admin)端

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桃子编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值