Django-美多商场项⽬-思路总结美多商场项⽬:前后端分离
⼀、项⽬准备:
1 商业模式
B2B -- 企业对企业(Business to Business)
阿⾥巴巴、慧聪⽹
C2C -- 个⼈对个⼈(Customer to Customer)
淘宝、⽠⼦⼆⼿车
B2C -- 企业对个⼈(Business to Customer)
唯品会、美多商场
C2B -- 个⼈对企业(Customer to Business)
海尔商城
O2O -- 线上到线下(Online to Offline)
美团、饿了吗
F2C -- ⼯⼚到个⼈(Factory to Customer)
戴尔
B2B2C -- 企业-企业-个⼈
京东商城、天猫商城
2 开发流程
项⽬⽴项(招投标、可⾏性分析)
需求分析(很重要)
需求分析说明书:给客户看的
需求规格说明书:给开发⼈员看的
产品原型(产品部)
分析:
分析⽹站的功能架构
开发服务器的选择
开发环境
研发⼈员
架构设计、数据库设计、单元测试:代码模块实现和测试(防⽌后门和bug)
前端
UI页⾯设计、前端代码编写
⽹站代码整合(循坏上⾯步骤)
集成测试(系统测试)
⽹站发布(不断迭代升级,进⾏优化)
3 需求分析
⽤户部分
注册
图⽚验证码
短信验证码
登录
第三⽅登录(QQ登录)
个⼈信息
邮箱填写与验证
浏览历史记录
地址管理
省市区地址信息加载
新增修改删除地址
设置默认地址
修改密码
商品部分
⾸页
商品分类
⼴告控制
商品列表
商品详情
商品搜索
购物车部分
购物车管理
订单部分
提交订单
我的订单
我的订单
狮驼岭剧情订单评价
script文件是什么⽀付部分
⽀付宝⽀付
4 项⽬架构
项⽬采⽤前后端分离的应⽤模式
前端使⽤Vue.js
jQuery:选择某个⽹页元素,然后对它进⾏某种操作
ajax:向后端请求数据
后端使⽤Django REST framework
MySQL:主从同步、双机热备
Redis:session缓存
celery:异步服务
FastDFS:分布式服务
5 创建⼯程
在git平台创建⼯程(注意:公司中通常使⽤gitlab私有服务器)操作流程⼀样
项⽬名称:meiduo
.gitignore:python
ssh⽅式:加密传送通道
rsa秘钥对(公钥私钥)
RSA:⾮对称加密算法
个人求职简历表电子版私钥:⽤来加密数据
公钥:⽤来解密数据
⽣成秘钥对
ssh-keygen -t rsa(Ubuntu、win10命令)
⽂件保存地址(有默认值)回车
cd .ssh
cat 打开私钥(id_rsa)、公钥(id_rsa.pub)⽂件
将公钥添加到git中(设置)
clone项⽬
在命令窗⼝中进⼊项⽬,查看分⽀
git branch
创建分⽀
git checkout -b dev(名称)
创建前端⽬录
mkdir front_end_pc
将前端代码放⼊⽬录中
本地提交
git commit -m"增加了静态⽂件"
push
git push origin dev:dev
第⼀次push的时候,会提⽰是否使⽤公私钥,输⼊yes即可
合并
在git平台,点击 Pull Request --> 选择源分⽀(dev)⽬标分⽀(master)--> 添加合并请求说明 --> 创建管理员点击合并 --> 合并分⽀ --> 接受Pull Request
安装live_server(跟python没有关系)
windows下安装node.js下载安装包即可
Ubuntu下安装node.js
⽅法⼀:(需要)
github/nodesource/distributions/blob/master/README.md(参考)
curl -sL desource/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs
⽅法⼆:(ubuntu下编译程序)
0、下载安装⽂件wget /dist/v10.13.0/node-v10.13.
1、解压 tar zxvf node-v10.13.
2、进⼊⽬录,执⾏sudo ./configure
3、执⾏编译命令 sudo make (要求⽬录中必须有⼀个MakeFile⽂件)
4、执⾏安装 sudo make install
⽅法三:
sudo apt install nodejs
⽅法四:(推荐)
1、安装nvm (node version manager)
curl -o- raw.githubusercontent/creationix/nvm/v0.33.11/install.sh | bash
2、执⾏source ~/.bashrc
3、nvm install node
安装live_server
安装live_server
npm install -g live-server
在静态⽂件⽬录下运⾏live-server
live-server运⾏在8080端⼝下,可以通过127.0.0.1:8080来访问静态页⾯。
创建Django REST framework⼯程
创建虚拟环境
mkvirtualenv meiduo -p python3
pip install django==1.11.11
pip install djangorestframework
pip install pymysql
在meduo⽬录下创建项⽬meiduo_mall
金属膨胀节django-admin startproject meiduo_mall
⽤pycharm打开meiduo⽂件夹,配置⼀下解释器,为刚刚虚拟环境中的python
调整⼯程⽬录
在根⽬录meiduo_mall下创建包docs,logs,scripts
在⼦meiduo_mall⽬录下创建包apps,libs,settings,utils
apps 存放Django的应⽤
libs 存放第三⽅的库⽂件
settings 存放配置⽂件的⽬录,分为开发dev和线上prod
utils 存放项⽬⾃⼰定义的公共函数或类等
docs ⽤于存放⼀些说明⽂档资料
scripts ⽤于存放管理脚本⽂件
并且在将settings.py拖到settings⽂件夹中改名字为dev.py
创建应⽤
在meiduo/meiduo_mall⽬录下输⼊:python manage.py startapp users
注册应⽤:rest_framework和users
users注册的路径需要注意,每次都要以meiduo_mall_.apps开头
解决:sys.path是python解释器导包的路径,如果我们能够给users所在的包添加进去那就可以了6 项⽬配置
增加启动参数runserver
修改manage.py中的settings.py的⽂件路径
创建数据库,并且创建⽤户
create user meiduo identified by 'meiduo';
grant all on meiduo_mall.* to 'meiduo'@'%';
flush privileges;
配置数据库
安装 pymysql
pip install pymysql
记得在meiduo/meiduo_mall/__init__.py⽂件中添加
import pymysql
pymysql.install_as_MySQLdb()
如果报错:
安装django-redis,并配置
pip install django-redis
时区配置
⽇志配置
异常配置
Pycharm提⽰设置
将⼀级⽬录meiduo设置为根⽬录
将⼆级⽬录meiduo下的apps⽂件夹设置为根⽬录
js版本配置
js语法是在js6版本才出现的,但是pycharm默认的是5.1,需要进⾏修改
⼆、⽤户部分
1 ⽤户模型类
创建⾃定义的⽤户模型类
模型类继承 dels.AbstractUser
在配置⽂件中进⾏配置
AUTH_USER_MODEL = "users.User"
配置完成之后,才能执⾏第⼀次数据库迁移
python manage.py makemigrations
python manage.py migrate
2 ⽤户注册接⼝
设计接⼝的思路
分析接⼝业务逻辑
分析接⼝的功能任务
接⼝的请求⽅式:GET、POST、PUT
接⼝的请求⽅式:GET、POST、PUT
接⼝的URL路径定义
需要前端传递的数据及数据格式
返回前端的数据及数据格式
注册业务接⼝分析
图⽚验证码
短信验证码
⽤户名判断是否存在
⼿机号判断是否存在
注册保存⽤户数据
图⽚验证码
访问⽅式:
DET /image_codes/(?P<image_code_id>[\w-]+)/
在apps中创建应⽤verifications,并注册
创建视图ImageCodeView(APIView)
接受参数
# 校验参数(URL中(正则匹配)已经实现)
⽣成验证码图⽚
第三⽅的包captcha(放在⼦⽬录meiduo_mall/libs中)
text, image = ate_captcha()
保存真实值
在配置⽂件中添加⼀个新的redis配置verify_codes,⽤于存放验证码数据
redis_conn = get_redis_connection("verify_codes")
创建常量 IMAGE_CODE_REDIS_EXPIRES
在当前⽬录中创建⽂件constants.py,定义常量IMAGE_CODE_REDIS_EXPIRES,设置为5 * 60 (即5分钟) redis_conn.setex("img_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text)
返回图⽚
# 固定返回验证码图⽚数据,不需要REST framework框架的Response帮助我们决定返回响应数据的格式
# 所以此处直接使⽤Django原⽣的HttpResponse即可
# 指明返回值类型
return HttpResponse(image, content_type="images/jpg")
创建路由url
前后端分离基本不需要重定向,所以不需要设置name属性
注册路由
设置域名
前端
后端
ubuntu编辑/etc/host⽂件,可以设置本地域名
sudo vim /etc/hosts
在⽂件中增加两条信息
127.0.0.1 iduo.site
127.0.0.1 iduo.site
windows系统中若设置本地域名,hosts⽂件在如下⽬录:
C:\Windows\System32\drivers\etc
修改settings配置中的ALLOWED_HOSTS
前端js请求不能写死,以防⽇后修改域名
在在前端front_end_pc/js⽬录中新建host.js⽂件
var host = 'iduo.site:8000';
图⽚验证码后端测试
运⾏报错,安装pillow安装包
缺少PIL,这是因为我们⽤到了captcha,这个captcha是⽣成图⽚验证码的,要⽤到图⽚相关的包PIL。
我们安装Pillow即可(PIL安装⽐较⿇烦,会有各种问题,所以就安装了可以完全替代PIL的Pillow包)
短信验证码
访问⽅式:
GET /sms_codes/(?P<mobile>1[3-9]\d{9})/?image_code_id=xxx&text=xxx
在应⽤verifications中创建视图SMSCodeView(GenericAPIView)
校验参数(由序列化器完成)
实现序列化器类,创建serializers.py⽂件夹
⽣成短信验证码
sms_code = "%06d" % random.randint(0, 999999)
保存短信验证码保存发送记录
使⽤云通讯第三⽅平台
手机mysql安装配置教程返回
补充redis管道
补充删除图⽚验证码的逻辑
避免⽤户拿着同⼀个图⽚验证码,获取多次短信验证码
在⽐较图⽚验证码之前删除redis中的图⽚验证码(拿出验证码,就删除,可以避免很多问题)跨域请求CORS
OPTION
浏览器会发送给option请求询问,后端是否⽀持
后端提供option请求的⽀持,告诉浏览器,⽀持哪些域名访问
Django中间件提供option请求
安装第三⽅包
pip install django-cors-headers
添加应⽤
设置中间层,在最上边添加中间件
添加⽩名单
使⽤Celery
定义任务
celery_app = Celery()
@celery_app.task
def send_sms_code(a, b, c):
pass
发布任务
send_sms_code.delay(a, b, c)
在⼀级⽬录meiduo_mall中创建celery_tasks包
Celery⽬录搭建
创建main.py、config.py⽂件,sms包(sms包中创建tasks.py⽂件)
安装扩展
pip install -U Celery
创建celery应⽤(main.py)
celery_app = Celery("meiduo")
对celery进⾏配置(config.py)
broker_url = "redis://127.0.0.1/15"
导⼊celery配置(main.py)
fig_from_object('fig')
导⼊任务(main.py)layer可数吗
celery_app.autodiscover_tasks(['celery_tasks.sms'])
将之前的验证码的代码copy到task.py⽂件中,并加以修改
不需要返回值(这个任务执⾏,已经不需要给前端返回响应了)
celery要执⾏的任务中有要获取⽇志looger,就需要知道django项⽬的配置⽂件才⾏
logger = Logger("django")
为celery使⽤django配置⽂件进⾏设置(main.py)
if v('DJANGO_SETTINGS_MODULE'):
将这个⽅法变为异步任务
在send_sms_code函数上添加装饰器@celery_app.task(name="send_sms_code")
使⽤Celery验证码
expires = constants.SMS_CODE_REDIS_EXPIRES // 60
temp_id = constants.SMS_CODE_TEMP_ID
send_sms_code.delay(mobile, sms_code, expires, temp_id)
celery的main是需要单独启动的 /meiduo/meiduo_mall$
celery -A celery_tasks.main worker -l info
判断帐号是否存在
判断⽤户名是否存在
判断⼿机号是否存在
⽤户注册
在users包中创建视图UserView(CreateAPIView) 相当于(CreateModelMixin, GenericAPIView)需要传⼊参数
username、password、password2、sms_code、mobile、allow
⽤序列化完成以下功能
接收参数
校验参数
保存⽤户数据,密码加密
序列化,返回数据
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论