栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

【Go语言实战】(2) Gin+Vue 电子商城

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Go语言实战】(2) Gin+Vue 电子商城

目录
    • 1. 需求分析
      • 1.1 数据获取
      • 1.2 ⽤户操作
      • 1.3 其他功能
      • 1.4 拓展功能
      • 1.5 开发环境
    • 2. 后端逻辑代码
      • 2.1 Python - 爬虫
      • 2.2 Golang - Gin
        • 2.2.1 数据库部分
        • 2.2.1 服务部分
    • ✨3. 前端核心代码
      • 3.1 AXIOS前后端交互
    • 4. 部分页面展示
      • 4.1 前台页面
      • 4.2 后台管理
    • 5. 结语
    • 最后


1. 需求分析 1.1 数据获取

使⽤爬⾍爬取某⼀电商平台上部分商品信息,包括但不限于商品图⽚、价格、名称等。

1.2 ⽤户操作

顾客

  • 注册,登录,登出
  • ⽤户个⼈资料展示与编辑,上传头像
  • 更改密码

商家

  • 拥有顾客的⼀切功能
  • 可以进⾏零⻝信息的上传(包括图⽚、价格等信息)

管理员

  • 拥有上述⽤户的所有功能
  • ⽤户管理
  • 商品信息管理
1.3 其他功能
  • 添加虚拟货币功能。
  • 订单有过期时间
  • 为管理员添加⼀个充值接⼝,管理员可以为某⼀⽤户加钱。
  • 添加购物⻋和背包功能。 购买操作在购物⻋界⾯完成,完成购买后完成物品转移,以及货币转移(购买后物品⾃动下架)
  • 背包中的物品可以由⽤户上传,但默认不在购物⻚⾯中出现,需持有者进⾏上架才能被其他⽤户购买。
1.4 拓展功能
  • ⽀付密码
  • 商品下评论
  • 注意并发性
1.5 开发环境

后端:Python v3.8 、Golang v1.15

数据库:MySql v5.7.30、Redis v4.0.9

文件存储 :七牛云存储

支付接口:支付FM


2. 后端逻辑代码 2.1 Python - 爬虫
  • 数据库表
class product_img_info(Base):
    __tablename__ = 'product_param_img'  # 数据库中的表名
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(), nullable=False)
    title = Column(String())
    category_id = Column(String())
    product_id = Column(String())
    info = Column(String())
    img_path = Column(String())
    price = Column(String())
    discount_price = Column(String())
    created_at = Column(DateTime, default=datetime.now)
    updated_at = Column(DateTime, default=datetime.now)
    deleted_at = Column(DateTime, default = None)

    def __repr__(self):
        return """
            
        """ % (self.id,self.product_id)
  • 爬取操作
def getHTMLText(url):
    try:
        header = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
            'cookie': '' # 到浏览器复制cookie
        }
        r = requests.get(url, timeout=30, headers=header)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        # print(r.text)
        return r.text
    except:
        return ""

def parsePage(html):
    view_prices = re.findall(r'"view_price":"[d.]*"', html)
    view_fees = re.findall(r'"view_fee":"[d.]*"', html)
    raw_titles = re.findall(r'"raw_title":".*?"', html)
    titles = re.findall(r'"title":".*?"', html)
    user_ids = re.findall(r'"user_id":"[d.]*"',html)
    pic_urls = re.findall(r'"pic_url":".*?"',html)
    detail_urls = re.findall(r'"detail_url":".*?"',html)
    for view_price,view_fee,title,raw_title,user_id,pic_url,detail_url in zip(view_prices,view_fees,titles,raw_titles,user_ids,pic_urls,detail_urls):
        price=eval(view_price.split(':')[1])
        discount_price=eval(view_fee.split(':')[1])
        name=eval(title.split(':')[1])
        a4=eval(raw_title.split(':')[1])
        product_id=eval(user_id.split(':')[1])
        img_path=eval(pic_url.split(':')[1])
        persopn = product_img_info(name=name,title=name,product_id=product_id,category_id="6",info=name,img_path=img_path,price=price,discount_price=discount_price)
        session.add(persopn)  # 增加一个
        session.commit() # 提交到数据库中

# 1手机 2女装 3电脑 4杯子 5零食 6耳机

def main():
    goods = '耳机'
    depth = 1
    start_url = 'https://s.taobao.com/search?q=' + goods
    for i in range(depth):
        try:
            url = start_url + '&s=' + str(44 * i)
            html = getHTMLText(url)
            parsePage(html)
        except:
            continue

if __name__ == '__main__':
   # Base.metadata.create_all()       # 创建表需要执行这行代码,如果表存在则不创建
    #sqlOperation()
    main()

2.2 Golang - Gin 2.2.1 数据库部分

部分数据库建设

  • 用户模型
//User 用户模型
type User struct {
	gorm.Model
	UserName       string `gorm:"unique"`
	Email          string //`gorm:"unique"`
	PasswordDigest string
	Nickname       string `gorm:"unique"`
	Status         string
	Limit          int   // 0 非管理员  1 管理员
	Type           int    // 0表示用户  1表示商家
	Avatar         string `gorm:"size:1000"`
	Monery 		   int
}

  • 商品模型
//商品模型
type Product struct {
	gorm.Model
	ProductID     string `gorm:"primary_key"`
	Name          string
	CategoryID    int
	Title         string
	Info          string `gorm:"size:1000"`
	ImgPath       string
	Price         string
	DiscountPrice string
	OnSale 		  string
	Num 		  int
	BossID        int
	BossName      string
	BossAvatar    string
}
2.2.1 服务部分

部分逻辑代码

  • 增加商品
func (service *UpProductService) UpProduct() serializer.Response {
	var product model.Product
	code := e.SUCCESS
	err := model.DB.First(&product,service.ID).Error
	if err != nil {
		logging.Info(err)
		code = e.ErrorDatabase
		return serializer.Response{
			Status: code,
			Msg:    e.GetMsg(code),
			Error:  err.Error(),
		}
	}
	product.OnSale = service.OnSale
	err = model.DB.Save(&product).Error
	if err != nil {
		logging.Info(err)
		code = e.ErrorDatabase
		return serializer.Response{
			Status: code,
			Msg:    e.GetMsg(code),
			Error:  err.Error(),
		}
	}
	return serializer.Response{
		Status: code,
		Data:   serializer.BuildProduct(product),
		Msg:    e.GetMsg(code),
	}
}
  • 修改商品
//更新商品
func (service *UpdateProductService) Update() serializer.Response {
	product := model.Product{
		Name:          service.Name,
		CategoryID:    service.CategoryID,
		Title:         service.Title,
		Info:          service.Info,
		ImgPath:       service.ImgPath,
		Price:         service.Price,
		DiscountPrice: service.DiscountPrice,
		OnSale: 	   service.OnSale,
	}
	product.ID = service.ID
	code := e.SUCCESS
	err := model.DB.Save(&product).Error
	if err != nil {
		logging.Info(err)
		code = e.ErrorDatabase
		return serializer.Response{
			Status: code,
			Msg:    e.GetMsg(code),
			Error:  err.Error(),
		}
	}
	return serializer.Response{
		Status: code,
		Msg:    e.GetMsg(code),
	}
}

✨3. 前端核心代码 3.1 AXIOS前后端交互
import axios from 'axios'

// 创建商品
const postProduct = form =>
  	axios.post('/api/v1/products', form).then(res => res.data)

// 读商品详情
const showProduct = id =>
  	axios.get(`/api/v1/products/${id}`).then(res => res.data)

// 读取商品列表
const listProducts = (category_id, start, limit) =>
  axios
    .get('/api/v1/products', { params: { category_id, start, limit } })
    .then(res => res.data)
    
//读取商品的图片
const showPictures = id => axios.get(`/api/v1/imgs/${id}`).then(res => res.data)

//搜索商品
const searchProducts = form =>
  	axios.post('/api/v1/searches', form).then(res => res.data)

export {
  	postProduct,
  	showProduct,
  	listProducts,
  	showPictures,
  	searchProducts
}

4. 部分页面展示 4.1 前台页面
  • 主页面

  • 商品页面

  • 发布商品

  • 购物车

  • 结算页面

  • 个人中心

4.2 后台管理
  • 用户管理
  • 商品管理


5. 结语

这个商场是在作者的开源项目基础上加以改进的!
原GitHub地址:CongZ666
真的非常感谢作者的开源
让我能通过这个项目,懂得Gin+Vue前后端分离的很多知识!!
还有懂了一些如同支付功能等,之前没有做过的功能。
不过我还没搞懂极验的功能。后续再完善。


最后

小生凡一,期待你的关注。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/902571.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号