Django电商项目(二)数据库设计、搭建流程

项目架构

在这里插入图片描述

数据库表结构

在这里插入图片描述

choice选项

from django.db import models
from tinymce.models import HTMLField
# Create your models here.


class GoodsTest(models.Model):
    '''测试模型类'''
    STATUS_CHOICES = (
        (0, '下架'),
        (1, '上架')
    )
    #默认选择上架
    status = models.SmallIntegerField(default=1, choices=STATUS_CHOICES, verbose_name='商品状态')
    detail = HTMLField(verbose_name='商品详情')

    class Meta:
        db_table = 'df_goods_test'
        # 修改默认admin后台标签为商品
        verbose_name = '商品'
        verbose_name_plural = verbose_name

授权连接数据库

修改配置文件为本机IP
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在这里插入图片描述
重启数据库
sudo service mysql restart
在这里插入图片描述

grant all privileges on dailyfresh.* to'root'@'192.168.222.1' identified by 'root' with grant option;
更新授权
flush privileges;

搭建项目的流程

创建项目

django-admin startproject dailyfresh

cd到项目目录下并创建app

每一个模块对应一个app

python manage.py startapp user
python manage.py startapp goods
python manage.py startapp cart
python manage.py startapp order

新建package 将app文件夹放入

在这里插入图片描述

将apps加入搜索路径 并注册app

setting.py

import os
import sys

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

...

# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tinymce', # 富文本编辑器
    'user', # 用户模块
    'goods', # 商品模块
    'cart', # 购物车模块
    'order', # 订单模块
)

新建templates文件夹并配置

'DIRS': [os.path.join(BASE_DIR, 'templates')],
在这里插入图片描述

配置数据库

在这里插入图片描述

新建静态文件目录

在这里插入图片描述

配置url.py文件

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^tinymce/', include('tinymce.urls')), # 富文本编辑器
    url(r'^user/', include('user.urls', namespace='user')), # 用户模块 namespace为反向解析 防止Url变化而匹配不到
    url(r'^cart/', include('cart.urls', namespace='cart')), # 购物车模块
    url(r'^order/', include('order.urls', namespace='order')), # 订单模块
    url(r'^', include('goods.urls', namespace='goods')), # 商品模块放在最后避免一开始就能匹配到
]

每个app下都要有一个Url.py文件格式如下
在这里插入图片描述

from django.conf.urls import url

urlpatterns = [

]

新建package包并建立抽象基类

在这里插入图片描述

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='更新时间')
    is_delete = models.BooleanField(default=False, verbose_name='删除标记')

    class Meta:
        # 说明是一个抽象模型类
        abstract = True

添加模型类文件

good/model.py

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

富文本编辑器

借助富文本编辑器,网站的编辑人员能够像使用offfice一样编写出漂亮的、所见即所得的页面。此处以tinymce为例,其它富文本编辑器的使用也是类似的。

在虚拟环境中安装包。

pip install django-tinymce==2.6.0
安装完成后,可以使用在Admin管理中,也可以自定义表单使用。

示例

1)在test6/settings.py中为INSTALLED_APPS添加编辑器应用。

INSTALLED_APPS = (
    ...
    'tinymce',
)

2)在test6/settings.py中添加编辑器配置。

TINYMCE_DEFAULT_CONFIG = {
    'theme': 'advanced',
    'width': 600,
    'height': 400,
}

3)在test6/urls.py中配置编辑器url。

urlpatterns = [
    ...
    url(r'^tinymce/', include('tinymce.urls')),
]

order/model.py

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('user.User', verbose_name='用户')
    addr = models.ForeignKey('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('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

user/model.py

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

使用自带的用户认证模型

/user/models.py

class User(AbstractUser, BaseModel):
    '''用户模型类'''

    class Meta:
        db_table = 'df_user'
        verbose_name = '用户'
        verbose_name_plural = verbose_name

settings.py

...
# django认证系统使用的模型类
AUTH_USER_MODEL='user.User'
...

注意: AUTH_USER_MODEL配置参数要在第一次迁移数据库之前配置,否则可能django的认证系统工作不正常

配置数据库初始化

在这里插入图片描述
dailyfresh/ _ init _.py

import pymysql
pymysql.install_as_MySQLdb()

生成迁移文件 python manage.py make migrations
迁移 python manage.py migrate
运行 python manage.py runserver

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Django电商开源项目是一个基于Python Django框架的开源电商平台,其中包括了商城前台和管理后台两个部分。它不仅仅是一个电商平台代码库,还提供了一系列设计原则、最佳实践和扩展机制,可以帮助开发者构建高效、易于维护的电商平台。 在商城前台部分,Django电商开源项目提供了商品搜索、购物车、订单管理、支付宝支付等功能。除了一些基本的功能外,该项目还提供了一些扩展功能例如商品推荐、优惠券、会员等级和积分促销等。在管理后台部分,Django电商开源项目提供了对商品、订单、会员、售后等管理功能,使得商家可以轻松管理和运营电商平台。 Django电商开源项目的代码清晰易懂,易于扩展。其使用了简单而有效的MVC模式,使得开发者可以快速定位问题并进行修复。此外,它使用了灵活的数据库模型设计,可以轻松适配不同类型的业务场景和需求。 总之,Django电商开源项目是一个功能齐全、易于扩展和维护的电商平台。它的应用范围广泛,可以满足不同规模和业务场景的需求。对于开发者而言,通过学习该项目,可以获得丰富的经验,并构建高质量的电商平台。 ### 回答2: Django是一个优秀的Web应用框架,它提供了丰富的工具和API,可以快速搭建各种复杂的Web应用。而电商是一个庞大而复杂的系统,因此将Django应用于电商开发,可以大大提高开发效率,缩短开发周期。 有许多优秀的Django电商开源项目可以供选择,其中最知名的是django-oscar和saleor。django-oscar是一个功能齐全的全栈电商解决方案,它提供了许多内置的功能,例如商品目录、订单流程、用户认证、付款等。而saleor则专注于电商前端设计和用户体验,它拥有漂亮、响应式的界面和工具,使得电商网站可以快速响应用户需求,提高收益。 不同的Django电商开源项目都有自己的特点和优势,而企业可以根据自身需求和预算情况进行选择。无论选择哪个项目,都可以通过Django框架快速搭建出高效、可扩展、易维护的电商网站,为企业创造更多商机。 ### 回答3: Django电商开源项目是一款基于Django框架开发的开源电商平台。该项目是由一群志愿者贡献时间和精力进行开发和维护的,旨在提供一个开箱即用的电商平台,方便开发者快速搭建自己的电商网站。 该项目的特点包括: 1. 易于安装和使用:Django电商开源项目提供简单易懂的安装和使用指南,即使是对Django框架不太了解的开发者也能够轻松上手。 2. 功能齐全:该项目包含了电商网站所需要的核心功能,例如商品管理、订单管理、购物车、支付等等。 3. 可定制性强:Django电商开源项目是基于Django框架开发的,因此开发者可以自由地根据自己的需求进行次开发和定制。 4. 社区支持强大:该项目拥有一个活跃的社区,开发者可以在社区中获得支持和帮助。 总之,Django电商开源项目是一款功能齐全、易于安装和使用、可定制性强的开源电商平台,适用于需要快速搭建电商网站的开发者。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值