Django项目之Web端电商网站的实战开发(一)

15 篇文章 52 订阅

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

项目源码下载

目录

一丶项目介绍

二丶电商项目开发流程

三丶项目需求

四丶项目架构概览

五丶项目数据库设计

六丶项目框架搭建


一丶项目介绍

  • 产品:关于Web端的电商网站
  • 商业模式:B2C模式 企业对个人
  • 设计模式:使用前后端不分离进行项目开发(后端控制前端的效果展示)

前端效果展示

二丶电商项目开发流程

1.流程图

2.1 前奏
    项目立项:公司BOSS决定做项目
    需求分析:分析客户的需求
    原型设计:产品经理画出产品原型图

2.2 前端
    UI设计:使用PS等工具对产品进行界面设计
    前端设计:根据UI人员设计的图片,写成对应的前端页面

2.3 后端
    架构设计:①模块划分,功能架构 ② 开发环境选择 ③其他技术 ④部署架构
    数据库设计:①分析数据表和表字段 ②表关系
    模块代码实现和单元测试:①后端开发人员进行分工开发 ②开发完成后给测试人员进行单元测试

2.4 尾声
    代码整合:将后端代码与前端代码进行耦合合并
    集成测试:将整合后的代码再次进行测试
    网站发布:在生产环境进行上线

三丶项目需求

用户模块

1. 注册页
    1.1 注册时校验用户名是否已被注册
    1.2 完成用户信息的注册
    1.3 给用户的注册邮箱发送邮件,用户点击邮件中的激活链接完成用户账户的激活
    1.4 城区的区域信息需动态加载

2. 登录页
    2.1 实现用户的登录功能

3. 用户中心
    3.1 用户中心信息页:显示登录用户的信息,包括用户名、电话和地址,同时页面下方显示出用户最近浏览的商品信息
    3.2 用户中心地址页:显示登录用户的默认收件地址,页面下方的表单可以新增用户的收货地址
    3.3 用户中心订单页:显示登录用户的订单信息
    3.4 用户可以选择城区、入住时间、离开时间等条件进行搜索

4. 其他
    4.1 如果用户已经登录,页面顶部显示登录用户的信息

商品相关

1. 首页
    1.1 动态指定首页轮播商品信息
    1.2 动态指定首页活动信息
    1.3 动态获取商品的种类信息并显示
    1.4 动态指定首页显示的每个种类的商品(包括图片商品和文字商品)
    1.5 点击某一个商品时跳转到商品的详情页面

2. 商品详情页
    2.1 显示出某个商品的详情信息
    2.2 页面的左下方显示出该种类商品的2个新品信息

3. 商品列表页
    3.1 显示出某一个种类商品的列表数据,分页显示并支持按照默认、价格、和人气进行排序
    3.2 页面的左下方显示出该种类商品的2个新品信息

4. 其他
    4.1 通过页面搜索框搜索商品信息

 购物车相关
    1 列表页和详情页将商品添加到购物车
    2 用户登录后,首页,详情页,列表页显示登录用户购物车中商品的数目 
    3 购物车页面:对用户购物车中商品的操作。如选择某件商品,增加或减少购物车中商品的数目

订单相关
    1 提交订单页面:显示用户准备购买的商品信息
    2 点击提交订单完成订单的创建
    3 用户中心订单页显示用户的订单信息
    4 点击支付完成订单的支付

四丶项目架构概览

1.页面图

2.功能图

3. 部署图

五丶项目数据库设计

1.分析网站页面所需的参数

注册页(register.html)
    ①用户名
    ②密码
    ③邮箱

登录页(login.html)
    ①用户名
    ②密码

用户中心页(user_center_site.html)
    ①收件人
    ②详细地址
    ③邮编
    ④联系方式

商品详情页(detail.html)
    ①商品名称
    ②简介
    ③价格
    ④单位
    ⑤商品库存
    ⑥商品详情
    ⑦商品图片
    ⑧商品种类编号

主页(index.html)
    ①商品种类名称 
    ②logo
    ③图片

商品列表页(list.html)
    ①商品名称
    ②商品价格
    ③商品图片
    ④商品分类

购物车页(cart.html)
    ①商品图片
    ②商品名称
    ③商品SKU(库存量单位)

提交订单页(place_order.html)
    ①地址
    ②支付方式
    ③商品信息
    ④总金额
    ⑤运费
    ⑥商品信息

用户订单页(user_center_order.html)
    ①订单编号
    ②支付状态
    ③订单创建时间

 2.将参数拆分到其所对应的表中

用户表(df_user)
    ①主键ID
    ②用户名
    ③密码
    ④邮箱
    ⑤激活标识(是否激活邮箱)
    ⑥权限标识(普通用户和管理员)

地址表(df_address)
    ①主键ID
    ②收件人
    ③收件地址
    ④邮编
    ⑤联系方式
    ⑥是否默认(默认收货地址)
    ⑦用户ID (外键)

商品SKU表(df_goods_sku)
    ①主键ID
    ②商品名称
    ③简介
    ④价格
    ⑤单位
    ⑥库存
    ⑦销量
    ⑧图片(这个图片字段只存一张商品封面图)
    ⑨状态
    ⑩商品种类ID(外键)
    ⑪spu ID(外键)

商品种类表(df_goods_type)
    ①主键ID
    ②种类名称
    ③logo
    ④图片

主页幻灯片商品表(df_index_banner)
    ①主键ID
    ②sku ID (外键)
    ③图片
    ④index (图片索引值)

主页促销活动表(df_index_promotion)
    ①主键ID
    ②图片
    ③活动url地址
    ④index(图片索引值)

商品SPU表(df_goods)
    ①主键ID
    ②名称
    ③商品详情

主页分类商品展示表(df_index_type_goods)
    ①主键ID
    ②sku ID (外键)
    ③种类ID
    ④展示标识
    ⑤index(图片索引值)

商品图片表(df_goods_image)
    ①主键ID
    ②图片
    ③sku ID

订单商品表(df_order_goods)
    ①主键ID
    ②订单ID (外键)
    ③sku ID (外键)
    ④商品数量
    ⑤商品价格
    ⑥评论

订单信息表(df_order_info)
    ①主键ID
    ②订单ID (外键)
    ③用户ID (外键)
    ④支付方式
    ⑤总数量
    ⑥总金额
    ⑦运费
    ⑧支付状态
    ⑨创建时间

六丶项目框架搭建

说明:博主这里使用开发环境为Windows7+PyCharm

1.在PyCharm中创建dailyfresh项目,然后再到终端中创建项目应用模块,如下图所示

2. 在实际项目开发中应用比较多时,会在项目下创建一个名为apps的包,并将应用目录放在该apps下

3.在配置文件settings中注册应用

  • step1 项目配置文件settings中导入sys模块,添加apps包到系统路径中,这样做的目的是在添加应用时不用写apps.应用名
sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
  • step2 注册刚创建出来的应用 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'df_cart',
    'df_goods',
    'df_order',
    'df_user'
]

 4.在配置文件settings中配置mysql数据库

  • step1 在mysql中创建dailyfresh数据库
create database dailyfresh charset=utf8;
  • step2 配置数据库 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dailyfresh',
        'USER': 'root',
        'PASSWORD': 'mysql',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}
  • step3 顺便设置语言和时区
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

5.在配置文件settings中配置静态文件目录

  • step1 在项目目录下创建static目录,用于存放前端静态文件

  • step2 在settings配置文件末端将static目录路径添加到系统路径中
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
  • step3 将前端资源放到static目录下

6.在根基urls.py文件设置正则匹配将应用模块中的urls包含进来

  • step1 在根基urls.py文件中进行如下编写,namespace表示反向解析
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^user/', include('df_user.urls', namespace='user')),  # 用户模块
    url(r'^cart/', include('df_cart.urls', namespace='cart')),  # 购物车模块
    url(r'^order/', include('df_order.urls', namespace='order')),  # 订单模块
    url(r'^', include('df_goods.urls', namespace='goods')),  # 商品模块
]
  • step2 在每个应用模块中创建urls.py文件,内容如下
# coding:utf-8

from django.conf.urls import url


urlpatterns = [
   
]

7.在项目目录下创建一个名为db的python包,在这个包下创建一个base_model.py文件,用作于基类完成数据库表共有字段

  • step1 创建base_model.py文件

  • step2 在base_model.py中进行如下编写
# coding:utf-8
from django.db import models


class BaseModel(models.Model):
    """抽象模型基类"""
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
    isDelete = models.BooleanField(default=False, verbose_name="删除标记")

    class Meta:
        # 表示为抽象模型类
        abstract = True

 8.在df_user模块中的models.py中定义两个模型类分别是用户模型类和地址模型类

# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import AbstractUser
from db.base_model import BaseModel
# Create your models here.


class User(AbstractUser, BaseModel):
    '''用户模型类'''
    class Meta:
        db_table = 'df_user'
        verbose_name = '用户'
        verbose_name_plural = verbose_name


class Address(BaseModel):
    '''地址模型类'''
    user = models.ForeignKey('User', verbose_name='所属账户')
    receiver = models.CharField(max_length=20, verbose_name='收件人')
    addr = models.CharField(max_length=256, verbose_name='收件地址')
    zip_code = models.CharField(max_length=6, null=True, verbose_name='邮政编码')
    phone = models.CharField(max_length=11, verbose_name='联系电话')
    is_default = models.BooleanField(default=False, verbose_name='是否默认')

    class Meta:
        db_table = 'df_address'
        verbose_name = '地址'
        verbose_name_plural = verbose_name

9.在df_goods模块中的models.py中定义模型类

  • step1 在models.py中进行如下编写
# -*- coding: utf-8 -*-
from django.db import models
from db.base_model import BaseModel
from tinymce.models import HTMLField
# Create your models here.


class GoodsType(BaseModel):
    '''商品类型模型类'''
    name = models.CharField(max_length=20, verbose_name='种类名称')
    logo = models.CharField(max_length=20, verbose_name='标识')
    image = models.ImageField(upload_to='type', verbose_name='商品类型图片')

    class Meta:
        db_table = 'df_goods_type'
        verbose_name = '商品种类'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


class GoodsSKU(BaseModel):
    '''商品SKU模型类'''
    status_choices = (
        (0, '下线'),
        (1, '上线'),
    )
    type = models.ForeignKey('GoodsType', verbose_name='商品种类')
    goods = models.ForeignKey('Goods', verbose_name='商品SPU')
    name = models.CharField(max_length=20, verbose_name='商品名称')
    desc = models.CharField(max_length=256, verbose_name='商品简介')
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品价格')
    unite = models.CharField(max_length=20, verbose_name='商品单位')
    image = models.ImageField(upload_to='goods', verbose_name='商品图片')
    stock = models.IntegerField(default=1, verbose_name='商品库存')
    sales = models.IntegerField(default=0, verbose_name='商品销量')
    status = models.SmallIntegerField(default=1, choices=status_choices, verbose_name='商品状态')

    class Meta:
        db_table = 'df_goods_sku'
        verbose_name = '商品'
        verbose_name_plural = verbose_name


class Goods(BaseModel):
    '''商品SPU模型类'''
    name = models.CharField(max_length=20, verbose_name='商品SPU名称')
    # 富文本类型:带有格式的文本
    detail = HTMLField(blank=True, verbose_name='商品详情')

    class Meta:
        db_table = 'df_goods'
        verbose_name = '商品SPU'
        verbose_name_plural = verbose_name


class GoodsImage(BaseModel):
    '''商品图片模型类'''
    sku = models.ForeignKey('GoodsSKU', verbose_name='商品')
    image = models.ImageField(upload_to='goods', verbose_name='图片路径')

    class Meta:
        db_table = 'df_goods_image'
        verbose_name = '商品图片'
        verbose_name_plural = verbose_name


class IndexGoodsBanner(BaseModel):
    '''首页轮播商品展示模型类'''
    sku = models.ForeignKey('GoodsSKU', verbose_name='商品')
    image = models.ImageField(upload_to='banner', verbose_name='图片')
    index = models.SmallIntegerField(default=0, verbose_name='展示顺序')

    class Meta:
        db_table = 'df_index_banner'
        verbose_name = '首页轮播商品'
        verbose_name_plural = verbose_name


class IndexTypeGoodsBanner(BaseModel):
    '''首页分类商品展示模型类'''
    DISPLAY_TYPE_CHOICES = (
        (0, "标题"),
        (1, "图片")
    )

    type = models.ForeignKey('GoodsType', verbose_name='商品类型')
    sku = models.ForeignKey('GoodsSKU', verbose_name='商品SKU')
    display_type = models.SmallIntegerField(default=1, choices=DISPLAY_TYPE_CHOICES, verbose_name='展示类型')
    index = models.SmallIntegerField(default=0, verbose_name='展示顺序')

    class Meta:
        db_table = 'df_index_type_goods'
        verbose_name = "主页分类展示商品"
        verbose_name_plural = verbose_name


class IndexPromotionBanner(BaseModel):
    '''首页促销活动模型类'''
    name = models.CharField(max_length=20, verbose_name='活动名称')
    url = models.URLField(verbose_name='活动链接')
    image = models.ImageField(upload_to='banner', verbose_name='活动图片')
    index = models.SmallIntegerField(default=0, verbose_name='展示顺序')

    class Meta:
        db_table = 'df_index_promotion'
        verbose_name = "主页促销活动"
        verbose_name_plural = verbose_name
  • step2 因为在df_goods模块中使用了第三方模块tinymce富文本编辑器所以需要在settings中进行添加应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tinymce',
    'df_cart',
    'df_goods',
    'df_order',
    'df_user'
]
  • step3 在配置文件末尾添加编辑器的配置
# 富文本编辑器配置
TINYMCE_DEFAULT_CONFIG = {
    'theme': 'advanced',
    'width': 600,
    'height': 400,
}
  • step4 在根基urls文件中配置编辑器url
url(r'^tinymce/', include('tinymce.urls')),  # 富文本编辑器

10.在df_order模块中的models.py中定义如下模型类

# -*- coding: utf-8 -*-
from django.db import models
from db.base_model import BaseModel
# Create your models here.


class OrderInfo(BaseModel):
    '''订单模型类'''
    PAY_METHOD_CHOICES = (
        (1, '货到付款'),
        (2, '微信支付'),
        (3, '支付宝'),
        (4, '银联支付')
    )

    ORDER_STATUS_CHOICES = (
        (1, '待支付'),
        (2, '待发货'),
        (3, '待收货'),
        (4, '待评价'),
        (5, '已完成')
    )

    order_id = models.CharField(max_length=128, primary_key=True, verbose_name='订单id')
    user = models.ForeignKey('df_user.User', verbose_name='用户')
    addr = models.ForeignKey('df_user.Address', verbose_name='地址')
    pay_method = models.SmallIntegerField(choices=PAY_METHOD_CHOICES, default=3, verbose_name='支付方式')
    total_count = models.IntegerField(default=1, verbose_name='商品数量')
    total_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品总价')
    transit_price = models.DecimalField(max_digits=10, decimal_places=2,verbose_name='订单运费')
    order_status = models.SmallIntegerField(choices=ORDER_STATUS_CHOICES, default=1, verbose_name='订单状态')
    trade_no = models.CharField(max_length=128, verbose_name='支付编号')

    class Meta:
        db_table = 'df_order_info'
        verbose_name = '订单'
        verbose_name_plural = verbose_name


class OrderGoods(BaseModel):
    '''订单商品模型类'''
    order = models.ForeignKey('OrderInfo', verbose_name='订单')
    sku = models.ForeignKey('df_goods.GoodsSKU', verbose_name='商品SKU')
    count = models.IntegerField(default=1, verbose_name='商品数目')
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品价格')
    comment = models.CharField(max_length=256, verbose_name='评论')

    class Meta:
        db_table = 'df_order_goods'
        verbose_name = '订单商品'
        verbose_name_plural = verbose_name

11. 在settings配置文件中使用django内置的认证系统指定的模型类为df_user下的User类

# django认证系统指定的模型类
AUTH_USER_MODEL = 'df_user.User'

12.生成迁移文件

13.执行迁移文件

14.查看数据库

15.运行项目

  • 60
    点赞
  • 386
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
Django 是一款开源的 Python Web框架,它提供了一系列的工具和功能,使得开发一个电商网站变得更加简单和高效。 首先,Django 提供了强大的数据库模型和ORM(对象关系映射)技术,可以方便地创建和管理网站所需的各种数据模型,比如产品、用户、订单等。通过定义模型类和与数据库的映射关系,我们可以轻松地进行数据库的操作,如增删改查。同时,Django的ORM还支持事务操作,确保数据的一致性和完整性。 其次,Django 提供了灵活的 URL 映射和视图函数。我们可以通过配置 URL 路由表,将不同的 URL 请求映射到对应的视图函数上处理。在视图函数中,我们可以处理用户的请求,并渲染相应的模板,以展示页面的内容。通过模板系统,我们可以轻松地创建和维护页面的布局和内容,实现电商网站的各种功能和交互效果。 除此之外,Django 还提供了自带的用户身份认证和权限控制功能,我们可以方便地实现用户注册、登录、忘记密码等功能,并限制用户在不同角色下的操作权限。此外,Django 还能轻松地集成第三方身份认证平台,如社交媒体账号登录。 Django 还提供了丰富的插件和扩展库,如购物车、支付接口、订单管理、商品搜索等等,我们可以借助这些插件和扩展库,大大加快网站开发的速度,减少重复劳动。 最后,Django 还拥有活跃的开发者社区和文档资源,我们可以从社区中获取支持和解决问题,还可以通过阅读官方文档和教程学习更多关于 Django 的知识和技巧。 综上所述,Django 是一款功能强大的 Web 开发框架,适合用于开发电商网站。它提供了一系列的工具和功能,使网站开发变得更加高效和简单。有了 Django,我们可以轻松地创建和管理数据库模型,处理用户的请求,实现各种功能和交互效果,并且还能借助插件和扩展库进行快速开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cdtaogang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值