文章目录
一、项目开发流程
1.1 说明:
1.架构设计
- 分析可能用到的技术点
- 前后端是否分离
- 前端使用哪些框架
- 后端使用哪些框架
- 选择什么数据库
- 如何实现缓存
- 是否搭建分布式服务
- 如何管理源代码
2.数据库设计 - 数据库表的设计至关重要
- 根据项目需求,设计合适的数据库表
- 数据库表在前期如果设计不合理,后期随需求增加会变得难以维护
3.集成测试 - 在测试阶段要留意测试反馈平台的bug报告
1.2 项目需求分析
1.需求分析原因:
- 可以整体的了解项目的业务流程和主要的业务需求
- 项目中,需求驱动开发。即开发人员需要以需求为目标来实现业务逻辑。
2.需求分析方式 - 企业中,借助产品原型图分析需求
- 需求分析完后,前端按照产品原型图开发前端页面,后端开发对应的业务及响应处理。
3.需求分析内容: - 页面及其业务流程和业务逻辑。
4.提示: - 我们现在借助示例网站作为原型图来分析需求。
1.3 归纳项目主要模块
为了方便项目管理及多人协同开发,我们根据需求将功能划分为不同的模块。
将来在项目中,每个模块都会对应一个子应用进行管理和解耦。
模块 功能
用户: 注册、登录、用户中心
验证: 图形验证、短信验证
第三方登录: QQ登录
首页广告: 首页广告
商品: 商品列表、商品搜索、商品详情
购物车: 购物车管理、购物车合并
订单: 确认订单、提交订单
支付: 支付宝支付、订单商品评价
MIS系统: 数据统计、用户管理、权限管理、商品管理、订单管理
二、项目架构设计
2.1 项目开发模式
选项 技术选型
开发模式:前后端不分离
后端框架: Django+ Jinja22模板引擎
前端框架: Vue.js
说明:
- 前后端不分离的开发模式,是为了提高搜索引擎排名,即SEO。特别是首页,详情页和列表页。搜索引擎爬虫请求到的页面数据就是渲染好的完整页面,搜索引擎可以直接解析建立索引。
- 页面需要整体刷新:我们会选择使用 Jinja2模板引擎来实现
- 页面需要局部刷新.:我们会选择使用 Vue.js来实现。
2.2 项目运行机制
三、Gitee工程创建
3.1 准备Gitee远程项目代码仓库
源码托管网站:码云( https://gitee.com/ )
3.1.1 注册码云账号,安装git到本地
3.1.1.1 注册
首先打开码云的网站https://gitee.com/,注册账户。已有账户的可以直接登录。
3.1.1.2 下载git
打开git官网https://git-scm.com/downloads,选择操作系统,下载客户端。(原则上点了下图所示的windows后即会自动下载。如果没有自动下载,则可以在这个网页https://git-scm.com/download/win手动点击下载。)
3.1.1.3 安装配置
下载后双击这exe文件,开始安装,可以一路下一步,进行安装。有需要的可以自己调整设置。
安装完成后,在开始菜单里找到Git中的Git Bash,点击打开,会出来一个类似命令行窗口的东西,这说明Git成功安装了。
然后可以用下面所示的命令配置用户名和邮箱,也可以先跳过。
git config --global user.name "yuetaope"
git config --global user.email "13953800865@163.com"
如果配置了,配置后可以查询配置情况。
git config -l
3.1.2 创建源码远程仓库: meiduo_project
3.1.3 克隆项目
3.1.3.1 复制项目地址
https://gitee.com/yuetaope/meiduo_project.git
3.1.3.2 启动 Git Bash 克隆项目
1、启动 Git Bash
2、切换当前路径到e:\projects
3、执行克隆代码
git clone https://gitee.com/yuetaope/meiduo_project.git
4、输入码云的用户名和密码,执行克隆‘
5、查看本地文件
3.2 创建Gitee本地工程项目
3.2.1 vscode 提交 gitee 流程
3.2.1.1 vs code 打开项目目录
3.2.1.2 打开忽略文件,添加 .idea 类型的文件,
任何的增加、删除、修改操作都会显示在更改中
3.2.1.3 点击+,将修改暂存
3.2.1.4 输入本次修改的描述,点击√,将暂存提交到本地库
3.2.1.5 推送到码云
3.2.1.6 刷新码云
3.2.2 创建项目
3.2.2.1 创建虚拟环境
在gitee项目中创建虚拟环境
E:\projects\meiduo_project> virtualenv meiduo_mall
3.2.2.2 进入虚拟环境
E:\projects\meiduo_project> cd meiduo_mall
3.2.2.3 激活虚拟环境
E:\projects\meiduo_project\meiduo_mall> scripts\activate
3.2.2.4 安装django
(meiduo_mall) PS E:\projects\meiduo_project\meiduo_mall>pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Django==2.2.9
3.2.2.5 创建项目(注意最后的 . )
一定注意最后有个. 代表在当前目录meiduo_mall 创建meiduo_mall 这个项目,否则会再生成下级目录meiduo_mall
(meiduo_mall) PS E:\projects\meiduo_project\meiduo_mall> django-admin startproject meiduo_mall .
创建后的目录结构如下
3.3 克隆项目到本地
克隆项目到本地的关键是虚拟环境的配置,直接克隆下来的环境在本机是没法运行的,所以一定要先安装虚拟环境再克隆项目。
3.3.1 新建虚拟环境
e盘新建meiduo_project文件夹
e:\meiduo_project
cmd
virtualenv meiduo_mall
3.3.2 修改meiduo_project文件夹为meiduo_project_current
3.3.3 启动 Git Bash ,克隆项目到e盘
cd e:
git clone https://gitee.com/yuetaope/meiduo_project.git
3.3.4 删除、复制克隆文件
删除克隆文件夹meiduo_project\meiduo_mall下的 pyvenv.cfg 文件和 scripts 文件夹
复制克隆文件夹meiduo_project下的所有文件到 meiduo_project_current 中
3.3.5 更改文件夹名称
删除E:\meiduo_project,将 E:\meiduo_project_currrent 改为 E:\meiduo_project
3.3.6 vscode打开文件夹E:\meiduo_project\meiduo_mall
配置python解释器为 E:\meiduo_project\meiduo_mall\scripts\python.exe
3.3.7 查看安装包
ctrl+shift+~,进入虚拟环境终端,pip list查看安装包
3.3.8 安装包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Django==2.2.9
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyMySQL
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cryptography
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jinja2
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pylint pylint_django
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django-redis
3.3.9 解决编码错误
“E:\projects\meiduo_project\meiduo_mall\lib\site-packages\django\db\backends\mysql\operations.py” 145-147行改为
if query is not None:
query = query.encode('utf-8').decode(errors='replace')
return query
系统正常启动,克隆完成
3.3.10 克隆推送
四、配置开发和生产环境
4.1 新建开发环境配置文件
- 在meiduo_mall.settings.py同级建立配置文件包settings,包内需包含或创建__init__.py文件
- 把原来的配置文件meiduo_mall.settings.py,移动到文件包settings中,改名为dev.py文件
- 修改manage.py中的配置文件路径为:meiduo_mall.settings.dev,即指向配置文件包中的开发环境配置文件
4.1 新建生产环境配置文件
- settings包中新建prod.py,内容暂时留空,等到上线部署的时候再填。
- 修改wsgi.py中的配置文件路径为:meiduo_mall.settings.prod,即指向配置文件包中的生产环境配置文件。
五、配置jinja2渲染模板
5.1 安装jinja2扩展包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jinja2
5.2 配置jinja2模板引擎
- dev.py配置环境中,Django模板引擎复制一份,这样就有了两个模板引擎
- 修改第一个模板引擎 ‘BACKEND’: ‘django.template.backends.jinja2.Jinja2’, # 配置jinja2模板引擎
- 项目中创建templates文件夹
- jinja2模板配置 ‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)], # 配置模板文件加载路径
5.3 补充jinja2模板引擎的环境变量
目的:确保jinja2模板引擎的{{ static(‘’) }} {{ url(‘’) }} 这类语句可以使用,方便读取静态文件和做重定向
5.3.1 创建jinja2模板引擎环境配置文件
- 项目中创建utils包,包含或新建__init__.py文件
- utils包中新建jinja2_env.py文件
from jinja2 import Environment
from django.urls import reverse
from django.contrib.staticfiles.storage import staticfiles_storage
def jinja2_environment(**options):
""" jinja2环境 """
# 创建环境对象
env = Environment(**options)
# 自定义语法:{{ static('静态文件相对路径') }} {{ url('路由的命名空间') }}
env.globals.update({
'static': staticfiles_storage.url, # 获取静态文件的前缀
'url': reverse, # 用django的重定向函数reverse接管jinja2模板引擎的url函数,反向解析
})
# 返回环境对象
return env
5.3.2 加载jinja2模板引擎环境
OPTIONS列表中新建键值对
‘environment’: ‘meiduo_mall.utils.jinja2_env.jinja2_environment’, # 补充jinja2模板引擎环境
六、配置MySQL数据库
6.1 新建MySQL数据库
6.1.1 新建数据库meiduo
create database meiduo charset=utf8;
show databases;
6.1.2 新建MySQL用户
create user yuetaope identified by ‘yuetaope’;
6.1.3 授权用户访问数据库
grant all on meiduo.* to ‘yuetaope’@‘%’;
6.1.4 刷新授权
flush privileges;
6.2 配置MySQL数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 引擎
'HOST': '127.0.0.1', # 数据库主机
'PORT': 3306, # 数据库端口号
'USER': 'yuetaope', # 数据库用户名
'PASSWORD': 'yuetaope', # 数据库密码
'NAME': 'meiduo', # 数据库名
},
}
配置完会报错
6.3 安装MySQL扩展包
- 安装MySQL驱动程序扩展包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyMySQL - 在工程同名子目录的__int__.py中,添加代码
from pymysql import install_as_MySQLdb
install_as_MySQLdb()
配置完报错
6.4 变更MySQL8.0的密码验证方式
6.4.1 安装密码包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cryptography
6.4.2 变更密码认证方式
use meiduo;
alter user ‘yuetaope’@‘%’ identified with mysql_native_password by ‘yuetaope’;
flush privileges;
配置完报错
6.5 解决编码错误
“E:\projects\meiduo_project\meiduo_mall\lib\site-packages\django\db\backends\mysql\operations.py” 145-147行改为
if query is not None:
query = query.encode('utf-8').decode(errors='replace')
return query
系统启动,配置完成