2.電商總結(jié)商品模塊

1. FastDFS

  • 海量存儲(chǔ), 存儲(chǔ)容量擴(kuò)展方便
  • 防止文件內(nèi)容重復(fù)
  • 結(jié)合nginx提高網(wǎng)站訪問(wèn)圖片的效率


    WX20171215-113919.png

2. Django對(duì)接fdfs

  • 自定義文件存儲(chǔ)類
from fdfs_client.client import Fdfs_client
from django.core.files.storage import Storage
from django.conf import settings


class FDFSStorage(Storage):
    # fast dfs 文件儲(chǔ)存類
    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:包含你上傳文件內(nèi)容的File對(duì)象
        # 創(chuàng)建一個(gè)Fdfs_client對(duì)象

        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):
        """返回訪問(wèn)文件的url路徑"""
        return self.base_url+name
  • 配置文件fdfs
# 設(shè)置Django的文件存儲(chǔ)類
DEFAULT_FILE_STORAGE = 'utils.fdfs.storage.FDFSStorage'

# 設(shè)置fdfs使用的client.conf文件路徑
FDFS_CLIENT_CONF = './utils/fdfs/client.conf'

# 設(shè)置fdfs存儲(chǔ)服務(wù)器上nginx的IP和端口號(hào)
FDFS_URL = 'http://192.168.191.134:8888/'
WX20171215-114634.png

3. 商品首頁(yè)

  • 動(dòng)態(tài)給對(duì)象增加屬性

4. 使用redis保存購(gòu)物車信息

  • 用戶點(diǎn)擊加入購(gòu)物車時(shí)需要添加購(gòu)物車記錄
  • 用戶訪問(wèn)購(gòu)物車頁(yè)面時(shí)獲取用戶的購(gòu)物車記錄
  • 每個(gè)用戶的購(gòu)物車記錄用一條數(shù)據(jù)保存
    hash:cart_用戶id: {'sku_id1': 數(shù)量, 'sku_id2': 數(shù)量}
  • 統(tǒng)計(jì)hash中元素的數(shù)量: hlen

5. 頁(yè)面靜態(tài)化

  • 把原本動(dòng)態(tài)的頁(yè)面處理結(jié)果保存成html文件, 讓用戶直接訪問(wèn)生成出來(lái)的靜態(tài)html頁(yè)面


    WX20171215-193136.png
  • 什么時(shí)候需要重新生成靜態(tài)頁(yè)面摊唇?
    管理員在后臺(tái)修改了首頁(yè)上數(shù)據(jù)表里的信息的時(shí)候比肄,需要重新生成靜態(tài)頁(yè)面逢倍。
    celery
    當(dāng)修改了數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí)會(huì)調(diào)用管理類里的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)
        # 發(fā)出任務(wù)
        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)
        # 發(fā)出任務(wù)
        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. 數(shù)據(jù)緩存

  • 把頁(yè)面用到的數(shù)據(jù)緩存起來(lái)忍法,如果使用這些數(shù)據(jù)的時(shí)候逮矛,先從緩存中獲取蜗顽,
    如果獲取不到坞嘀,再去查詢數(shù)據(jù)庫(kù)砚哆。

  • 什么時(shí)候緩存數(shù)據(jù)需要更新缩膝?
    管理員在后臺(tái)修改了首頁(yè)上數(shù)據(jù)表里的信息的時(shí)候混狠,需要更新緩存數(shù)據(jù)。也是在管理器類
    首頁(yè)數(shù)據(jù)緩存

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

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

            # 獲取首頁(yè)輪播商品信息
            goods_banners = IndexGoodsBanner.objects.all().order_by('index')

            # 首頁(yè)促銷活動(dòng)信息

            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)

網(wǎng)站本身性能的優(yōu)化疾层,減少數(shù)據(jù)庫(kù)的查詢的次數(shù)将饺。防止惡意的攻擊。DDOS攻擊

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市予弧,隨后出現(xiàn)的幾起案子刮吧,更是在濱河造成了極大的恐慌,老刑警劉巖掖蛤,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杀捻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蚓庭,警方通過(guò)查閱死者的電腦和手機(jī)致讥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)器赞,“玉大人拄踪,你說(shuō)我怎么就攤上這事∪” “怎么了惶桐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)潘懊。 經(jīng)常有香客問(wèn)我姚糊,道長(zhǎng),這世上最難降的妖魔是什么授舟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任救恨,我火速辦了婚禮,結(jié)果婚禮上释树,老公的妹妹穿的比我還像新娘肠槽。我一直安慰自己,他們只是感情好奢啥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布秸仙。 她就那樣靜靜地躺著,像睡著了一般桩盲。 火紅的嫁衣襯著肌膚如雪寂纪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天赌结,我揣著相機(jī)與錄音捞蛋,去河邊找鬼。 笑死柬姚,一個(gè)胖子當(dāng)著我的面吹牛拟杉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播量承,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼搬设,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼啼染!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起焕梅,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卦洽,沒(méi)想到半個(gè)月后贞言,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阀蒂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年该窗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚤霞。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酗失,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昧绣,到底是詐尸還是另有隱情规肴,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布夜畴,位于F島的核電站拖刃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贪绘。R本人自食惡果不足惜兑牡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望税灌。 院中可真熱鬧均函,春花似錦、人聲如沸菱涤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)粘秆。三九已至墩朦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翻擒,已是汗流浹背氓涣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陋气,地道東北人劳吠。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像巩趁,于是被迫代替她去往敵國(guó)和親痒玩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子淳附,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件蠢古、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評(píng)論 4 62
  • 成人游戲(好吧奴曙,我承認(rèn)是整容游戲看多了) 我謝謝你 因?yàn)槟阕屛叶牧耸裁词菒?ài)…… 我也恨你 為什么結(jié)束了它 鹿晗如...
    李智瞳閱讀 215評(píng)論 0 1
  • 源碼地址:https://github.com/BadWaka/blog-waka-by-vue 上圖 點(diǎn)擊左上角...
    waka閱讀 1,967評(píng)論 1 4
  • 這兩天的朋友圈里刷到的全是開(kāi)學(xué)的消息,哦草讶,這個(gè)寒假也就這樣過(guò)去了洽糟。想想剛放假的時(shí)候給自己制定計(jì)劃要每天看多少書(shū)寫(xiě)多...
    淺語(yǔ)閑言閱讀 168評(píng)論 0 2