项目名称:DailyFresh生鲜类电商网站
项目地址:https://git.nowcoder.com/6998084/dailyfresh
系统简介
DailyFresh属于经典的电商网站搭建项目,其主要是B2C面向生鲜类产品,应用于PC网页端的一个项目。本项目主要包含四个模块:用户模块、商品模块、购物车模块、订单模块。
###详细说明
Background
DailyFresh属于经典的电商网站搭建项目,其主要是B2C面向生鲜类产品,应用于PC网页端的一个项目。本项目主要包含四个模块:用户模块、商品模块、购物车模块、订单模块。每一个模块的详细功能如下:- 用户模块:注册、登录、激活、退出、个人中心、收货地址。
- 商品模块:首页、详情、列表、搜索。
- 购物车:增、删、改、查。
- 订单模块:确认订单页面、创建订单、请求支付、(与支付宝的对接)、查询支付结果、对订单的评论。
适用范围
目前所采用的技术手段应该可以满足中小以及个人网站的使用,基本功能齐全,当然还有一些地方需要优化。虚拟环境创建
你可以创建一个虚拟环境来建立一个相对独立而且稳定的实验体系,当然,如果你需要真正部署这个项目,你可以在你的Linux服务器上直接进行部署(那么你可以跳过下面的部署)。
sudo pip install virtualenv
sudo pip install virtualenvwrapper
修改你的环境变量(Note: 在虚拟环境下,不要用sudo安装,否则安装在主机上,你的mysql可以部署在主机上。)
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
source ~/.bashrc
为与主机的mysql交互你需要安装pymysql
pip install pymysqlRedis的安***r>tar -zxvf redis-3.2.8.tar.gz
sudo mv ./redis-3.2.8 /usr/local/redis/
cd /usr/local/redis/
sudo make
sudo make test #实际上可以省略,并且不是返回大量错误,都可以继续下一步
sudo make install
#配置redis
sudo cp /usr/local/redis/redis.conf /etc/redis/
然后你可以按需求更改/etc/redis/redis.conf的内容。配置安装FastDFS
安装 libfastcommon
下载libfastcommon-master.zip,解压并进入目录,执行
./make.sh #如果sh没有运行权限,你可以chmod +x
sudo ./make.sh install
安装 FastDFS
下载并解压fastdfs-master.zip,进入到 fastdfs-master目录中
make
sudo make install
配置跟踪服务器tracker
sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
本机名: malfoy
在/home/malfoy/目录中创建目录 fastdfs/tracker
mkdir –p /home/malfoy/fastdfs/tracker
sudo vim /etc/fdfs/tracker.conf
修改:
base_path=/home/malfoy/fastdfs/tracker
配置存储服务器storage
sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
#在/home/malfoy/fastdfs/ 目录中创建目录 storage
mkdir –p /home/python/fastdfs/storage
sudo vim /etc/fdfs/storage.conf
#修改:
base_path=/home/malfoy/fastdfs/storage
store_path0=/home/malfoy/fastdfs/storage
tracker_server=ip:port(for example: 127.0.0.1:22122)#启动服务器:
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
测试是tracker与storage是否安装成功:
sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
sudo vim /etc/fdfs/client.conf
#修改内容:
base_path=/home/malfoy/fastdfs/tracker
tracker_server=ip:22122#LoadFile:
fdfs_upload_file /etc/fdfs/client.conf /home/malfoy/Desktop/T.txt
#return:
group1/M00/00/00/......txt
若成功返回上述,则代表目前为止配置是ojbk的。
安装nginx及fastdfs-nginx-module
这部分的安装较为繁琐,可能需要细心一些。
首先安装两个依赖Debian
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install openssl libssl-dev#解压缩 nginx-1.8.1.tar.gz 解压缩 fastdfs-nginx-module-master.zip 进入nginx-1.8.1目录中
sudo ./configure --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module-master /home/malfoy/Desktop/nginx-1.8.1/src
sudo make
sudo make install
#进入fastdfs-nginx-module-master/src
sudo cp mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
sudo vim /etc/fdfs/mod_fastdfs.conf
#修改为:
connect_timeout=10
tracker_server=ip:22122
url_have_group_name=true
store_path0=/home/malfoy/fastdfs/storagesudo cp http.conf /etc/fdfs/http.conf
sudo cp mime.types /etc/fdfs/mime.types
sudo vim /usr/local/nginx/conf/nginx.conf
#修改:
server { listen 8888; server_name localhost; location ~/group[0-9]/ { ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
#启动nginx:
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
sudo /usr/local/nginx/sbin/nginx使用python客户端上传测试
#下载:fdfs_client-py-master.zip
#安装一些依赖的包:
pip install mutagen
pip install requests
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 {'Uploaded size': '0B', 'Status': 'Upload successed.', 'Group name': 'group1', 'Local file name': 'test', 'Remote file_id': 'group1/M00/00/00/wKjAgFuXHmSAK5rIAAAAAAAAAAA3374302', 'Storage IP': '192.168.192.128'}
除此之外,可能会漏掉一些库,因此进行了pip freeze,并将本机所有的lib以及其版本贴了出来。
amqp==2.3.2 asn1crypto==0.24.0 billiard==3.5.0.4 celery==4.2.1
certifi==2018.8.24 cffi==1.11.5 chardet==3.0.4 cryptography==2.3.1
Django==1.8.2 django-haystack==2.6.0 django-redis==4.0.0``django-redis-sessions==0.5.6 django-tinymce==2.6.0 fdfs-client-py==1.2.6 idna==2.7
itsdangerous==0.24 jieba==0.39 kombu==4.2.1 mutagen==1.41.1
Pillow==3.4.1 pycparser==2.18 pycryptodomex==3.6.6 PyMySQL==0.9.2
python-alipay-sdk==1.8.0 pytz==2018.5 redis==2.10.6 redis-py-cluster==1.3.5 requests==2.19.1 six==1.11.0 urllib3==1.23
uWSGI==2.0.17.1 vine==1.1.4 Whoosh==2.7.4
用户中心:Django默认的认证系统: AbstractUser
- 创建用户模型类的时候,直接进行继承。
- 你创建的admin也会在user里面。
- login_required装饰器,可以对用户登录行为的判断。
- 用户注册:
- 在核心注册之前,已经进行了数据校验。
- 对需要激活的用户,为了保证我们地址,服务器规律的安全,我们队激活地址(包含用户信息),利用itsdangerous对信息进行加密,生成token,同时可以设置链接的有效时间。
- 激活邮件发送:可以利用Django进行发送。但是邮件发送过程中,进程阻塞,用户体验较差。于是借助celery进行异步发送。通过代码发送任务,利用redis作为中间人,最后选择一个服务器作为处理,专门处理任务(必须有外网,也必须有任务代码)。
- 用户登录:利用redis作为缓存。不但判断了用户名密码是否匹配,还对激活进行了校验
- 有些页面应该为用户登陆之后才能进行访问:装饰器,闭包函数。如果你没有登录,会跳转到登录页面。也可以写一个继承与MixIn的类。
- logout函数清除用户的session信息。
- redis存储历史浏览记录
- 用户访问商品后,会添加一条历史浏览记录。
- 当用户访问个人信息页面的时候获取历史浏览记录。
- 历史浏览记录存于redis中,redis作为内存型数据库,存取速度远远高于mysql
- 我们选择每个用户的历史浏览记录用一条数据保存,list,新的浏览产生时,进行一个头插。
商品模块:
- 使用FastDFS的好处:
- 海量存储,扩容方便。
- 解决文件内容重复问题。(hash指纹)
- 结合nginx提高网站访问图片的效率。
- 商品首页
- 首页更换较少,因此进行静态优化。也就是将原本动态处理的页面渲染结果保存为html。提高性能。
- 管理员修改信息,则通过celery对首页的静态页面重新渲染静态页面。
- 通过admin后台管理,当Goods的增删出现,附加删除缓存的动作。当没有缓存,则需要去数据库查询,并缓存。
- 这样做的好处:能一定程度防止DDOS恶意攻击,减少数据库查询次数。
- 商品搜索-搜索引擎
- 搜索引擎: 可以对表中的某些关键词进行分析,简历索引数据。
- 全文搜索框架:帮助用户使用搜索引擎。
- 我们采用haystack + whoosh +jieba 对字段进行搜索,能够较好地支持中英文搜索。
- 使用FastDFS的好处:
购物车模块
- 我们对前端传递的数据进行了校验。
- 采用post的方式接收数据。
- 利用ajax提升用户体验。
订单模块
- 订单生成:
- 用户下单后,会向order表中增加记录。
- 用户订单中有几个商品,会向goods中增加几条记录。
- 借助mysql事务,对高并发秒杀类行为进行优化。你可以选择在冲突较少的时候使用乐观锁,也可以在冲突较多的时候使用悲观锁。
- 订单支付(对接支付宝):
- 订单生成:
部署:
你可以借助nginx和uwsgi进行项目部署,实现负载均衡。
欢迎大家参与牛客项目平台活动!Star+Fork助力项目还能参与抽奖~
原创区:https://www.nowcoder.com/discuss/210455
搬运区:https://www.nowcoder.com/discuss/210457