一、项目简介
- 本次项目实践,完成一下电商商城开发,开发一个类似淘宝类似的简化的商城
1、项目开发流程介绍
1.1 架构设计
- 分析可能用到的技术点
- 前后端是否分离
- 前端使用那些框架
- 后端使用那些框架
- 选择什么数据库
- 如何实现缓存
- 是否搭建分布式服务
- 如何管理源代码
1.2 数据库设计
- 数据库表的设计非常重要
- 根据项目需求,设计合适的数据库表
- 数据库表在前期如果设计不合理,后期随需求增加会变得难以维护
1.3 集成测试
- 在测试阶段要留意测试反馈平台的bug报告
2、项目需求分析
2.1 需求分析原因:
- 可以整体的了解项目的业务流程和主要的业务需求。
- 项目中,需求驱动开发。即开发人员需要以需求为目标来实现业务逻辑。
2.2 需求分析方式:
- 企业中,借助 产品原型图 分析需求。
- 需求分析完后,前端按照产品原型图开发前端页面,后端开发对应的业务及响应处理。
2.3需求分析内容:
- 页面及其业务流程和业务逻辑。
2.4 主要步骤
2.4.1 项目主要页面介绍(略)
2.4.2 项目主要模块归纳
模块 | 功能 |
---|---|
验证 | 图形验证、短信验证 |
用户 | 注册、登录、用户中心 |
第三方登录 | QQ登录 |
首页广告 | 首页广告 |
商品 | 商品列表、商品搜索、商品详情 |
购物车 | 购物车管理、购物车合并 |
订单 | 确认订单、提交订单 |
支付 | 支付宝支付、订单商品评价 |
MIS系统 | 数据统计、用户管理、权限管理、商品管理、订单管理 |
3、项目架构设计
3.1 项目开发模式
- 本项目开发模式如下:
选项 | 技术选型 |
---|---|
开发模式 | 前后端不分离 |
后端框架 | Django |
前端框架 | Vue.js |
- 说明
- 前后端不分离的开发模式,是为了提高搜索引擎排名,即SEO。特别是首页,详情页和列表页。
- 页面需要局部刷新:我们会选择使用Vue.js来实现。
3.2 项目运行机制
二、工程创建与配置
1、准备工作
1.1 创建商城虚拟环境
- 为项目创建目录并进入,执行 pipenv shell
pipenv shell
1.2 安装Django框架及相关包
# 安装django环境
pip install django==2.2
# 安装mysql驱动
pip install mysqlclient
# 安装redis驱动
pip install django-redis
1.3 创建美多商城Django工程
django-admin startproject lgshop
- 如果现在运行,出现以下提示
将 run/debug configurations的script paramenters 参数改为 runserver
1.4 其它准备
- mysql数据库准备: mysql 5.7
- redis数据库准备: redis 2.1
2、配置开发环境
- 项目的环境分为开发环境和生产环境。
- 开发环境:用于编写和调试项目代码。
- 生产环境:用于项目线上部署运行。
2.1 指定开发环境配置文件
- django创建项目时,自动在manager.py的main()函数指定了配置文件,将此处修改成自己指定的配置文件
def main():
"""Run administrative tasks."""
# django默认的配置文件
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lgshop.settings')
# 开发环境的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lgshop.dev')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
- 注:wsgi.py 项目正式上线时才会使用,开发时可以忽略,但也不要删除
2.2 配置MySQL数据库
- 修改配置文件:本项目开发环境配置文件是dev.py
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# mysql 版本 5.7
'ENGINE': 'django.db.backends.mysql',
'NAME': 'lg_shop', # 数据库名字
'USER': 'root', # 数据库用户名
'PASSWORD': 'root', # 数据库密码
'HOST': '127.0.0.1', # 数据库地址
'PORT': 3306 # 数据库端口号
}
}
- 需要创建mysql数据库root/root@lg_shop
2.3 配置redis数据库
- 默认的redis可以设定0号数据库(可以改)
- session可以保存发1号数据库
- 其它数据如果保存到其它库中。
- 每增加一个,可以重命名一个,并修改相关参数
# Redis缓存 0-15 16
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
2.4 配置工程日志
- 配置工程日志目的:使用日志文件记录网站输出信息
LOGGING = {
'version': 1,
'disable_existing_loggers': False, # 是否禁用已经存在的日志器
'formatters': { # 日志信息显示的格式
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
},
},
'filters': { # 对日志进行过滤
'require_debug_true': { # django在debug模式下才输出日志
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': { # 日志处理方法
'console': { # 向终端中输出日志
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'file': { # 向文件中输出日志
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'logs/lgshop.log'), # 日志文件的位置
'maxBytes': 300 * 1024 * 1024,
'backupCount': 10,
'formatter': 'verbose'
},
},
'loggers': { # 日志器
'django': { # 定义了一个名为django的日志器
'handlers': ['console', 'file'], # 可以同时向终端与文件中输出日志
'propagate': True, # 是否继续传递日志信息
'level': 'INFO', # 日志器接收的最低日志级别
},
}
}
- 在根目录上创建 logs目录
2.4 配置前端静态文件
- 商城项目中需要使用静态文件,比如css,images,js等等
2.4.1 准备静态文件
在项目目录下新建一个static目录
2.4.2 指定静态文件加载路径
# ./lgshop/dev.py
# 指定加载静态文件的路径前缀
STATIC_URL = '/static/'
# 静态文件加载路径
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
2.5 配置模板文件
2.5.1 准备模板文件
在项目目录下新建一个templates目录
2.5.2 指定模板文件加载路径
# ./lgshop/dev.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
3、设置导包路径
- 为了方便管理所有应用, 创建apps目录,存放所有应用
3.1 创建用户模块子应用
-例创建users应用
python ..\manage.py startapp users
3.2 定义users的一个view方法
# ./apps/user/views.py
from django.shortcuts import render
from django.views import View
class RegisterView(View):
def get(self, request):
"""提供用户注册页面"""
return render(request, 'register.html')
- 注:在./templates/目录下创建register.html
3.3 注册app应用
- 有两种方法:直接注册;设置导包路径注册
3.3.1 直接注册
3.3.2 设置导包路径注册
- 注:查看导包路径: print(sys.path)
3.4 注册应用路由
- 先注册应用内的路由或先注册总路由都可以
3.2.1 注册应用内部的路由
# ./apps/users/urls.py
from django.urls import path
from . import views
app_name = 'users'
urlpatterns = [
# 注册
path('register/', views.RegisterView.as_view(), name='register'),
]
3.2.2 注册总路由
# ./lgshop/urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', include('apps.users.urls')),
]