天天生鲜Django项目——5. 商品模块开发

1.了解FastDFS分布式文件系统集群

客户端要上传时去找tracker,tracker给它分配一台storage给它,分配给它以后,这个client就去连接storage的机器和端口,就把数据存到Volume2上。将来存完了以后,这台机器就会给它返回一个文件的id,这个文件id是识别这个图片的唯一标识,将来你要去做下载时,你必须携带这个文件的id,然后tracker就去解析这个文件的id,从而得知你这个图片存在哪台storage机器上,然后呢,他就会把这台机器的IP地址告诉client,然后你去那台机器去取就行了。显然这里面的tracker特别的关键,他作为管理者,无论是上传还是下载都离不开它,所以tracker必须搭建成集群,最少要启动3台以上,形成一个集群。
天天生鲜Django项目——5. 商品模块开发_第1张图片
启动FastDFS的方法,需要的操作:

1) 修改如下的配置文件 (在/etc/fdfs目录中)

在这里插入图片描述
tracker_server=自己的ip地址:22122

2) 启动tracker、storage、nginx服务:

sudo service fdfs_trackerd start
sudo service fdfs_storaged start

sudo /usr/local/nginx/sbin/nginx

3) 执行如下命令测试是否成功

fdfs_upload_file /etc/fdfs/client.conf 要上传的图片文件
如果返回类似group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg的文件id则说明文件上传成功
在浏览器中可以用 127.0.0.1:8888/返回的文件id
访问图片
在这里插入图片描述

2.python对接fastdfs

from fdfs_client.client import Fdfs_client
client = Fdfs_client(’/etc/fdfs/client.conf’)
ret = client.upload_by_filename(‘test’)
ret

3.项目上传图片和使用图片流程

天天生鲜Django项目——5. 商品模块开发_第2张图片
海量存储,存储容量扩展方便。
文件内容重复。
结合nginx提高网站访问图片的效率。

4. Django二次开发对接FastDFS

  1. 配置文件settings中加入如下配置
    天天生鲜Django项目——5. 商品模块开发_第3张图片
  2. 创建utils/fdfs 目录
    天天生鲜Django项目——5. 商品模块开发_第4张图片
  3. storage.py文件中自定义文件存储类
    在这里插入图片描述
    天天生鲜Django项目——5. 商品模块开发_第5张图片

5.商品首页

5.1基本页面处理

动态给对象增加属性
在这里插入图片描述

5.2保存购物车信息的数据设计

天天生鲜Django项目——5. 商品模块开发_第6张图片

5.3页面静态化

把原本动态的页面处理结果保存成html文件,让用户直接访问这个生成出来的静态的html页面
天天生鲜Django项目——5. 商品模块开发_第7张图片
在这里插入图片描述
天天生鲜Django项目——5. 商品模块开发_第8张图片
天天生鲜Django项目——5. 商品模块开发_第9张图片

5.4使用缓存

将处理计算的结果先临时保存起来,下次使用的时候可以先直接使用,如果没有这个备份的数据,重新进行计算处理
将缓存数据保存在内存中 (本项目中保存在redis中)
cache
修改了数据库的数据,直接删除缓存
缓存要设置有效期
天天生鲜Django项目——5. 商品模块开发_第10张图片

6.商品详情页

添加历史浏览记录:
天天生鲜Django项目——5. 商品模块开发_第11张图片

7.商品列表页

7.1分页

http://python.usyiyi.cn/documents/django_182/topics/pagination.html
天天生鲜Django项目——5. 商品模块开发_第12张图片
天天生鲜Django项目——5. 商品模块开发_第13张图片

7.2页码控制

天天生鲜Django项目——5. 商品模块开发_第14张图片

8.商品搜索

8.1安装和配置
  1. 安装python包。
    pip install django-haystack
    pip install whoosh
  2. 在settings.py文件中注册应用haystack并做如下配置。
    天天生鲜Django项目——5. 商品模块开发_第15张图片
    天天生鲜Django项目——5. 商品模块开发_第16张图片
8.2索引文件生成
  1. 在goods应用目录下新建一个search_indexes.py文件,在其中定义一个商品索引类。
    天天生鲜Django项目——5. 商品模块开发_第17张图片
  2. 在templates下面新建目录search/indexes/goods。
    天天生鲜Django项目——5. 商品模块开发_第18张图片
  3. 在此目录下面新建一个文件goodssku_text.txt并编辑内容如下。
    在这里插入图片描述
  4. 使用命令生成索引文件。
    python manage.py rebuild_index
8.3全文检索的使用
  1. 配置url。
    天天生鲜Django项目——5. 商品模块开发_第19张图片
    2)表单搜索时设置表单内容如下。
    在这里插入图片描述
    点击标题进行提交时,会通过haystack搜索数据。
  2. 全文检索结果。
    搜索出结果后,haystack会把搜索出的结果传递给templates/search目录下的search.html,传递的上下文包括:
    query:搜索关键字
    page:当前页的page对象 –>遍历page对象,获取到的是SearchResult类的实例对象,对象的属性object才是模型类的对象。
    paginator:分页paginator对象
    通过HAYSTACK_SEARCH_RESULTS_PER_PAGE 可以控制每页显示数量。
    天天生鲜Django项目——5. 商品模块开发_第20张图片
8.4改变分词方式
  1. 安装jieba分词模块。
    pip install jieba
  2. 找到虚拟环境py_django下的haystack目录。
    /home/python/.virtualenvs/bj17_py3/lib/python3.5/site-packages/haystack/backends/
  3. 在上面的目录中创建ChineseAnalyzer.py文件。
import jieba
from whoosh.analysis import Tokenizer, Token

class ChineseTokenizer(Tokenizer):
    def __call__(self, value, positions=False, chars=False,
                 keeporiginal=False, removestops=True,
                 start_pos=0, start_char=0, mode='', **kwargs):
        t = Token(positions, chars, removestops=removestops, mode=mode, **kwargs)
        seglist = jieba.cut(value, cut_all=True)
        for w in seglist:
            t.original = t.text = w
            t.boost = 1.0
            if positions:
                t.pos = start_pos + value.find(w)
            if chars:
                t.startchar = start_char + value.find(w)
                t.endchar = start_char + value.find(w) + len(w)
            yield t

def ChineseAnalyzer():
    return ChineseTokenizer()
  1. 复制whoosh_backend.py文件,改为如下名称。
    whoosh_cn_backend.py
  2. 打开复制出来的新文件,引入中文分析类,内部采用jieba分词。
    from .ChineseAnalyzer import ChineseAnalyzer
  3. 更改词语分析类。
    查找
    analyzer=StemmingAnalyzer()
    改为
    analyzer=ChineseAnalyzer()
  4. 修改settings.py文件中的配置项。
    天天生鲜Django项目——5. 商品模块开发_第21张图片
  5. 重新创建索引数据
    python manage.py rebuild_index

你可能感兴趣的:(Django)