0
点赞
收藏
分享

微信扫一扫

后台管理系统----day03

陆佃 2022-03-30 阅读 43

目录

项目立项

1 后台管理介绍

1.1 后台管理系统介绍

对于一家企业来说,拥有一个完整网站是很重要的事情,网站包括前端设计和后端的信息管理。简单来说,前端就是我们当我们打开一个网站的时候,肉眼所能看到的一切,而后台则是我们所看不到的一个信息管理系统。

网站后台管理系统主要是用于对网站前台的信息管理,如文字、图片、影音、和其他日常使用文件的发布、更新、删除等操作,同时也包括会员信息、订单信息、访客信息的统计和管理。简单来说就是对网站数据库和文件的快速操作和管理系统,以使得前台内容能够得到及时更新和调整。

2 后台管理模块

2.1 后台管理模块划分

商城后台管理系统一般分以下模块:商品管理、会员管理、订单管理、用户管理、角色权限 、报表业务、库存管理和广告业务等。

商品管理:商品分类的新增修改管理,品牌的增删改查及商品的增删改查功能

会员管理:商城的会员等级,优惠、积分、充值及会员的增删改查功能

订单管理:用户下单以后,订单的状态跟踪以及所有订单的统计功能

角色权限:增加新用户以后,为用户增加权限功能

报表业务:日销售报表、日新增用户报表、商品的销售报表、品牌销售报表、分类销售报表等

库存管理:商品的库存查看以及进货单、退货单、调价单的管理

广告业务:首页的轮播图、快讯等广告业务的管理

2.2 表设计及核心字段

class Role(BaseModel):
    """
    角色表
    """
    name = models.CharField(max_length=30)

    class Meta:
        db_table = 'tb_role'
        verbose_name = '角色表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


class Permission(models.Model):
    """
    用户的权限
    """
    url = models.CharField(max_length=60, verbose_name='权限路由')
    title = models.CharField(max_length=30, verbose_name='权限名称')
    role = models.ManyToManyField(Role)

    class Meta:
        db_table = 'tb_permission'
        verbose_name = '权限表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title


class User(AbstractUser):
    """
       用户表 
    """

    phone = models.CharField(max_length=11, null=True, blank=True, verbose_name='用户手机')
    role = models.ManyToManyField(Role, verbose_name='所属角色')

    class Meta:
        db_table = 'user'

    def __str__(self):
        return self.username

class Cate(BaseModel):
    """
    商品分类
    """
    name = models.CharField(max_length=30)
    cid = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)

    class Meta:
        db_table = 'cate'

    def __str__(self):
        return self.name


class Group(BaseModel):
    """
    分类分组
    """
    name = models.CharField(max_length=30)
    cate = models.OneToOneField(Cate, on_delete=models.CASCADE)

    class Meta:
        db_table = 'cate_group'

    def __str__(self):
        return self.name


class Color(BaseModel):
    """
    颜色
    """
    name = models.CharField(max_length=20)

    class Meta:
        db_table = 'color'

    def __str__(self):
        return self.name


class Version(BaseModel):
    """
    版本
    """
    name = models.CharField(max_length=30)

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'version'


class Goods(BaseModel):
    """
    商品表
        名称、描述、价格、颜色、版本、库存、商品详情、商品默认图片、分类
    """
    name = models.CharField(max_length=100)
    describe = models.CharField(max_length=500)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    stock = models.IntegerField(default=0)
    detail = models.TextField()
    image_default = models.ImageField(upload_to='goods')
    color = models.ManyToManyField(Color)
    version = models.ManyToManyField(Version)
    cate = models.ForeignKey(Cate, on_delete=models.CASCADE)

    class Meta:
        db_table = 'goods'

    def __str__(self):
        return self.name

class AdvCate(BaseModel):
    """
    广告分类,
        轮播图、快讯、热门
    """
    name = models.CharField(max_length=30)

    class Meta:
        db_table = 'adv_cate'

    def __str__(self):
        return self.name


class AdvContent(BaseModel):
    """
    广告内容
        标题、分类、图片、链接、内容
    """
    title = models.CharField(max_length=100)
    img = models.ImageField(upload_to='adv')
    url = models.CharField(max_length=200, null=True, blank=True)
    content = models.TextField()
    cate = models.ForeignKey(AdvCate, on_delete=models.CASCADE)
    periodical = models.CharField(max_length=30, null=True, blank=True, verbose_name='期刊')

    def __str__(self):
        return self.title

    class Meta:
        db_table = 'adv_content'

 class Status(BaseModel):
    name = models.CharField(max_length=30)

    class Meta:
        db_table = 'status'

    def __str__(self):
        return self.name


class Order(BaseModel):
    """
    订单表
    """
    PAY_METHOD_CHOICE = (
        (1, '支付宝'),
        (2, '微信'),
        (3, '银联卡'),
        (4, '代付')
    )
    order_no = models.CharField(max_length=128, primary_key=True)
    address = models.ForeignKey('users.Address', on_delete=models.CASCADE)
    user = models.ForeignKey('users.User', on_delete=models.CASCADE)
    sum_total = models.DecimalField(max_digits=10, decimal_places=2)
    sum_count = models.IntegerField()
    pay_method = models.IntegerField(choices=PAY_METHOD_CHOICE, default=1)
    status = models.ForeignKey(Status, on_delete=models.CASCADE)

    class Meta:
        db_table = 'order'

    def __str__(self):
        return self.order_no


class OrderSku(BaseModel):
    EVALUATE_CHOICE = (
        (0, '0分'),
        (1, '20分'),
        (2, '40分'),
        (3, '60分'),
        (4, '80分'),
        (5, '100分')
    )
    order = models.ForeignKey(Order, on_delete=models.CASCADE)
    sku = models.ForeignKey('goods.SKU', on_delete=models.CASCADE)
    sku_num = models.IntegerField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    comment = models.TextField()
    evaluate = models.IntegerField(choices=EVALUATE_CHOICE, default=5)

    class Meta:
        db_table = 'order_sku'

3 仓库创建

3.1 Git回顾

git简介

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务端软件支持。

git与svn的区别

Git 不仅仅是版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。

Git 与 SVN 区别点:

  • 1、Git 是分布式的,SVN 是集中式:这是 Git 和其它非分布式的版本控制系统,最核心的区别,例如 SVN,CVS 等
  • **2、Git 把内容按元数据方式存储,而 SVN 是按文件:**所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
  • **3、Git 分支和 SVN 的分支不同:**分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
  • **4、Git 没有一个全局的版本号,而 SVN 有:**目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
  • **5、Git 的内容完整性要优于 SVN:**Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

请添加图片描述

4 git基本操作

创建仓库

项目根目录下执行如下:

git init

或者直接克隆远程仓库:

git clone url

配置签名

局部配置

git config user.name "laufing"
git config user.email "123@163.com"

全局配置

git config --global user.name "donghaiming"
git config --global user.email "haiming_dong@126.com"

提交版本

# 将一个文件增加到暂存区
git add test.txt
# 将所有文件增加到暂存区
git add ./

# 提交版本 到本地仓库
git commit -m '版本号或描述信息'

查看日志

git log
git log --oneline  # 日志过长时,按行显示

git reflog # 历史操作

版本回退

git reset --hard HEAD^  # 回退到当前版本的前一个版本  HEAD^^表示回退到当前版本的前两个版本
git reset --hard HEAD`1  # 回退到当前版本的前一个版本  HEAD`5表示回退到当前版本的前5个版本
git reset --hard 版本号序号  # 回退到指定的版本

查看状态

git status

撤消未添加到暂存区的修改

git checkout -- <文件名>

撤消暂存区的修改

git reset HEAD <文件名>  # 先撤消暂存区的修改
git checkout -- <文件名>  # 再撤消修改

对比文件的内容

git diff HEAD -- <文件名>

对比两个版本之间某个文件的不同

git diff HEAD HEAD^ -- <文件名>

删除文件

rm <文件名>

使用git add 或者git rm提交暂存区

使用git checkout -- <文件名>撤消暂存区的修改

创建远程仓库

请添加图片描述

请添加图片描述

Git分支

查看分支

git branch -v

创建分支

# 创建分支,不切换
git branch <分支名>
# 切换分支
git switch <分支名>
or
git checkout <分支名>


# 创建分支,并切换  
git checkout -b <分支名>  
# 创建dev分支,并切换
git checkout -b dev 

合并分支到主分支

# 1. 切换到主分支
git checkout master
# 2. 合并分支dev 到主分支
git merge dev

注意:合并分支内容需要先切换到主分支上

删除分支

# 删除一个分支
git branch -d <分支名>  
# 删除dev分支
git branch -d dev 

查看合并后的日志

git log --pretty=oneline

 
解决合并冲突
某分支和master中同一个文件都有改动时,合并该分支到主分支时会有冲突,如下:
在这里插入图片描述
解决方案:

  1. 在master主分支上,使用vim打开冲突的文件,会看到如下内容:
    在这里插入图片描述
  2. 手动删除冲突的符号,得到如下内容:
    在这里插入图片描述
  3. 保存退出,esc 然后 shift + zz
  4. 将冲突文件增加到暂存区,git add 文件名
  5. 提交到本地仓库, git commit -m ‘描述’

 
练习:

  1. 初始化一个本地仓库,在主分支master上创建一个文件a.txt,添加内容为master 这个单词,最终提交;
  2. 创建一个分支dev并切换,然后修改a.txt文件,添加内容为branch dev, 最终提交;
  3. 切换到主分支,修改a.txt文件,添加内容before merge,最终提交。
  4. 合并dev分支到master主分支,并解决冲突问题。
    最终得到如下结果:
    在这里插入图片描述

 
 
禁用快进合并
有时将分支的更新合并到上游的master主分支时,会出现如下情况:(此时默认采用fast-forward 快进模式)
在这里插入图片描述
这时可以禁用快进模式:

git merge --no-ff -m '禁用快速合并的描述' dev

 
 
bug分支

软件开发中,bug就像家常便饭,有了bug就需要修复,在git中,由于分支功能强大,所以, 每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

接到一个修复bug的任务,当手头的工作还没有完成时,git中还提供了一个stash功能, 可以把当前工作状态保存起来,等修复完bug后,再恢复状态继续工作。

git stash  # 保存工作现场(添加到暂存区的文件,尚未提交到本地仓库)
git stash list  # 列出工作现场
git stash pop  # 恢复工作现场

在这里插入图片描述
 
 
git 开发模式
在这里插入图片描述
master,负责版本发布、历史记录;
dev, 负责开发
其他分支,适当的时候合并到dev分支。

举报

相关推荐

day03

Day03

Day03(

Linux Day03

day03 事件高级

Java基础day03

web开发day03

旅游项目day03

0 条评论