目录
1、了解FastDFS分布式文件系统
客户端要上传时去找tracker,tracker给它分配一台storage给它,分配给它以后,这个client就去连接storage的机器和端口,就把数据存到Volume2上。将来存完了以后,这台机器就会给它返回一个文件的id,这个文件id是识别这个图片的唯一标识,将来你要去做下载时,你必须携带这个文件的id,然后tracker就去解析这个文件的id,从而得知你这个图片存在哪台storage机器上,然后呢,他就会把这台机器的IP地址告诉client,然后你去那台机器去取就行了。显然这里面的tracker特别的关键,他作为管理者,无论是上传还是下载都离不开它,所以tracker必须搭建成集群,最少要启动3台以上,形成一个集群。
在这里插入图片描述
启动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
进入fdfs_client-py-master.zip所在目录
pip install fdfs_client-py-master.zip
>>> from fdfs_client.client import Fdfs_client
>>> client = Fdfs_client('/etc/fdfs/client.conf')
>>> ret = client.upload_by_filename('test')
>>> ret
{'Group name':'group1','Status':'Upload successed.', 'Remote file_id':'group1/M00/00/00/
wKjzh0_xaR63RExnAAAaDqbNk5E1398.py','Uploaded size':'6.0KB','Local file name':'test'
, 'Storage IP':'192.168.243.133'}
3、项目上传图片和使用图片流程
海量存储,存储容量扩展方便。
文件内容重复。
结合nginx提高网站访问图片的效率。
4 、Django二次开发对接FastDFS
(1)、配置文件settings中加入如下配置
(2)、创建utils/fdfs 目录
(3)、storage.py文件中自定义文件存储类
5、商品首页
(1)、基本页面处理
动态给对象增加属性
(2)、 保存购物车信息的数据设计
(3)、页面静态化
把原本动态的页面处理结果保存成html文件,让用户直接访问这个生成出来的静态的html页面
(4)、使用缓存
将处理计算的结果先临时保存起来,下次使用的时候可以先直接使用,如果没有这个备份的数据,重新进行计算处理
将缓存数据保存在内存中 (本项目中保存在redis中)
cache
修改了数据库的数据,直接删除缓存
缓存要设置有效期
6、商品详情页
添加历史浏览记录:
7、商品列表页
(1)、分页
(2)、页码控制
8、商品搜索
1、安装与配置
(1) 安装python包。
pip install django-haystack
pip install whoosh
(2)在settings.py文件中注册应用haystack并做如下配置。
2、索引文件生成
(1)在goods应用目录下新建一个search_indexes.py文件,在其中定义一个商品索引类。
(2)在templates下面新建目录search/indexes/goods。
(3)在此目录下面新建一个文件goodssku_text.txt并编辑内容如下。
(4)使用命令生成索引文件
python manage.py rebuild_index
3、全文检索的使用
(1) 配置url。
(2)表单搜索时设置表单内容如下。
点击标题进行提交时,会通过haystack搜索数据。
(3)全文检索结果。
搜索出结果后,haystack会把搜索出的结果传递给templates/search目录下的search.html,传递的上下文包括:
query:搜索关键字
page:当前页的page对象 –>遍历page对象,获取到的是SearchResult类的实例对象,对象的属性object才是模型类的对象。
paginator:分页paginator对象
通过HAYSTACK_SEARCH_RESULTS_PER_PAGE 可以控制每页显示数量。
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()
(4)复制whoosh_backend.py文件,改为如下名称。
whoosh_cn_backend.py
(5)打开复制出来的新文件,引入中文分析类,内部采用jieba分词。
from .ChineseAnalyzer import ChineseAnalyzer
(6)更改词语分析类。
查找
analyzer=StemmingAnalyzer()
改为
analyzer=ChineseAnalyzer()
(7)修改settings.py文件中的配置项。
(8)重新创建索引数据
python manage.py rebuild_index