美文网首页
2.电商总结商品模块

2.电商总结商品模块

作者: 小爆虾丶 | 来源:发表于2017-12-15 19:45 被阅读0次

1. FastDFS

  • 海量存储, 存储容量扩展方便
  • 防止文件内容重复
  • 结合nginx提高网站访问图片的效率


    WX20171215-113919.png

2. Django对接fdfs

  • 自定义文件存储类
from fdfs_client.client import Fdfs_client
from django.core.files.storage import Storage
from django.conf import settings


class FDFSStorage(Storage):
    # fast dfs 文件储存类
    def __init__(self, client_conf=None, base_url=None):
        if client_conf is None:
            client_conf = settings.FDFS_CLIENT_CONF
        self.client_conf = client_conf
        if base_url is None:
            base_url = settings.FDFS_URL
        self.base_url = base_url

    def _open(self, name, mode='rb'):
        pass

    def _save(self, name, content):
        # name:你选择上传文件的名字
        # content:包含你上传文件内容的File对象
        # 创建一个Fdfs_client对象

        client = Fdfs_client(self.client_conf)
        res = client.upload_by_buffer(content.read())

        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }
        if res['Status'] != 'Upload successed.':
            raise Exception('上传文件到fast dfs失败')
        filename = res['Remote file_id']
        return filename

    def exists(self, name):
        """Django判断文件名是否可用"""
        return False

    def url(self, name):
        """返回访问文件的url路径"""
        return self.base_url+name
  • 配置文件fdfs
# 设置Django的文件存储类
DEFAULT_FILE_STORAGE = 'utils.fdfs.storage.FDFSStorage'

# 设置fdfs使用的client.conf文件路径
FDFS_CLIENT_CONF = './utils/fdfs/client.conf'

# 设置fdfs存储服务器上nginx的IP和端口号
FDFS_URL = 'http://192.168.191.134:8888/'
WX20171215-114634.png

3. 商品首页

  • 动态给对象增加属性

4. 使用redis保存购物车信息

  • 用户点击加入购物车时需要添加购物车记录
  • 用户访问购物车页面时获取用户的购物车记录
  • 每个用户的购物车记录用一条数据保存
    hash:cart_用户id: {'sku_id1': 数量, 'sku_id2': 数量}
  • 统计hash中元素的数量: hlen

5. 页面静态化

  • 把原本动态的页面处理结果保存成html文件, 让用户直接访问生成出来的静态html页面


    WX20171215-193136.png
  • 什么时候需要重新生成静态页面?
    管理员在后台修改了首页上数据表里的信息的时候,需要重新生成静态页面。
    celery
    当修改了数据库数据时会调用管理类里的save_model或者delete_model

from django.contrib import admin
from goods.models import GoodsType, GoodsSKU, IndexGoodsBanner, IndexTypeGoodsBanner, IndexPromotionBanner
from django.core.cache import cache
# Register your models here.
class BaseModelAdmin(admin.ModelAdmin):
    def delete_model(self, request, obj):
        super().delete_model(request, obj)
        # 发出任务
        from celery_tasks.tasks import generate_static_index_html
        generate_static_index_html.delay()
        # 删除缓存
        cache.delete('index_page_data')

    def save_model(self, request, obj, form, change):
        super().save_model(request, obj, form, change)
        # 发出任务
        from celery_tasks.tasks import generate_static_index_html
        generate_static_index_html.delay()
        # 删除缓存
        cache.delete('index_page_data')


class IndexGoodsBannerAdmin(BaseModelAdmin):
    pass

admin.site.register(IndexGoodsBanner, IndexGoodsBannerAdmin)

6. 数据缓存

  • 把页面用到的数据缓存起来,如果使用这些数据的时候,先从缓存中获取,
    如果获取不到,再去查询数据库。

  • 什么时候缓存数据需要更新?
    管理员在后台修改了首页上数据表里的信息的时候,需要更新缓存数据。也是在管理器类
    首页数据缓存

class IndexView(View):
    def get(self, request):
        context = cache.get('index_page_data')

        if context is None:
            # 商品种类
            types = GoodsType.objects.all()

            # 获取首页轮播商品信息
            goods_banners = IndexGoodsBanner.objects.all().order_by('index')

            # 首页促销活动信息

            promotion_banners = IndexPromotionBanner.objects.all().order_by('index')

            for type in types:
                type.image_banner = IndexTypeGoodsBanner.objects.filter(type=type, display_type=1).order_by('index')
                type.title_banner = IndexTypeGoodsBanner.objects.filter(type=type, display_type=0).order_by('index')

            context = {
                'types': types,
                'goods_banners': goods_banners,
                'promotion_banners': promotion_banners
            }
            cache.set('index_page_data', context, 3600)
        user = request.user
        cart_count = 0
        if user.is_authenticated():
            conn = get_redis_connection('default')
            cart_key = 'cart_%d' % user.id
            cart_count = conn.hlen(cart_key)

        context['cart_count'] = cart_count

        return render(request, 'index.html', context)

网站本身性能的优化,减少数据库的查询的次数。防止恶意的攻击。DDOS攻击

相关文章

  • 2.电商总结商品模块

    1. FastDFS 海量存储, 存储容量扩展方便 防止文件内容重复 结合nginx提高网站访问图片的效率WX20...

  • laravel 电商课程学习总结

    1. 课程内容总览 1.1 功能模块概述 电商分为电商网站和电商后台管理系统两部分,包括了用户模块、商品模块、购物...

  • 电商交易系统-写在前面的话

    电商系统发展的比较成熟,针对自己参与已经了解过的电商系统做一个总结 1.电商交易系统-商品信息 2.电商交易系统-...

  • 电商概述

    电商模块 一般来说,电商主要分为以下几个模块 商品 电商系统最基础的单元、用户浏览最多的页面,其内容好坏,直接影响...

  • 电商后台 | 关于商品模块改造的总结1

    最近在负责电商后台的商品模块改造以及新增仓储物流功能,将工作内容梳理总结了一下,第一篇文章梳理改造的商品管理模块,...

  • 电商后台产品经理——采购管理

    在电商后台中采购中心这一模块,它是电商公司管理采购的模块,包含供应商管理,采购订单管理,采购商品管理,在该模块中采...

  • 电商系统-商品模块

    商品模块是做什么的? 顾名思义,商品模块是电商系统管理商品信息的地方,这个模块看似简单,看起来无非就是存储商品名称...

  • 20180222 , Objc.io_KV ◊◊

     电商项目模块划分: 商品详情页, 多入口 BaseEnv模块:登录,网关,数据库,JSBridge,基础...

  • 电商随想

    1.电商的商品列表 2.电商的搜索(es) 3.电商的促销规则 4.电商的购物车 5.电商的订单 6.电商的支付 ...

  • 电商平台优惠券

    业务背景: 1.平台为电商平台,同时销售虚拟商品和实物商品 2.

网友评论

      本文标题:2.电商总结商品模块

      本文链接:https://www.haomeiwen.com/subject/bubrwxtx.html