首页 > 其他分享 >【Django开发】美多商城项目第1篇:项目结构设计和工程创建(附代码,已分享)

【Django开发】美多商城项目第1篇:项目结构设计和工程创建(附代码,已分享)

时间:2024-01-03 21:36:03浏览次数:40  
标签:项目 配置 django Jinja2 模板 日志 Django 结构设计

本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django + Jinja2模板引擎 + Vue.js实现前后端逻辑,Nginx服务器(反向代理)Nginx服务器(静态首页、商品详情页、uwsgi服务器(美多商场业务场景),后端服务:MySQL、Redis、Celery、RabbitMQ、Docker、FastDFS、Elasticsearch、Crontab,外部接口:容联云、QQ互联、支付宝。

项目笔记和代码自取地址: https://gitee.com/yinuo112/Backend/tree/master/Django/美多商城/1.md

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


共 11 章,132 子模块


欢迎来到美多商城!

项目准备

项目介绍

项目需求分析

需求分析原因:

  • 可以整体的了解项目的业务流程和主要的业务需求。
  • 项目中,需求驱动开发。即开发人员需要以需求为目标来实现业务逻辑。

需求分析方式:

  • 企业中,借助 产品原型图 分析需求。
  • 需求分析完后,前端按照产品原型图开发前端页面,后端开发对应的业务及响应处理

需求分析内容:

  • 页面及其业务流程和业务逻辑

提示:

  • 我们现在借助 示例网站 作为原型图来分析需求。

1. 项目主要页面介绍

1.首页广告

2.注册

3.登录

4.QQ登录

5.个人信息

6.收货地址

7.我的订单

8.修改密码

9.商品列表

10.商品搜索

11.商品详情

12.购物车

13.结算订单

14.提交订单

15.支付宝支付

16.支付结果处理

17.订单商品评价

2. 归纳项目主要模块

为了方便项目管理及多人协同开发,我们根据需求将功能划分为不同的模块。

将来在项目中,每个**模块都会对应一个子应用进行管理和解耦**。

模块 功能
验证 图形验证、短信验证
用户 注册、登录、用户中心
第三方登录 QQ登录
首页广告 首页广告
商品 商品列表、商品搜索、商品详情
购物车 购物车管理、购物车合并
订单 确认订单、提交订单
支付 支付宝支付、订单商品评价
MIS系统 数据统计、用户管理、权限管理、商品管理、订单管理

3. 知识要点

  1. 需求分析原因:需求驱动开发。
  2. 需求分析方式:企业中,使用产品原型图。
  3. 需求分析内容:页面及业务逻辑。
  4. 需求分析结果:划分业务模块,明确每个模块下的主要功能,并以子应用的形式进行管理。

项目架构设计

1. 项目开发模式

选项 技术选型
开发模式 前后端不分离
后端框架 Django + Jinja2模板引擎
前端框架 Vue.js

说明:

  • 前后端不分离的开发模式,是为了提高搜索引擎排名,即SEO。特别是首页,详情页和列表页。
  • 页面需要整体刷新:我们会选择使用Jinja2模板引擎来实现。
  • 页面需要局部刷新:我们会选择使用Vue.js来实现。

2. 项目运行机制

3. 知识要点

  1. 项目开发模式

    • 前后端不分离,方便SEO
    • 采用Django + Jinja2模板引擎 + Vue.js实现前后端逻辑。
  2. 项目运行机制

    • 代理服务:Nginx服务器(反向代理)
    • 静态服务:Nginx服务器(静态首页、商品详情页、...)
    • 动态服务:uwsgi服务器(美多商场业务场景)
    • 后端服务:MySQL、Redis、Celery、RabbitMQ、Docker、FastDFS、Elasticsearch、Crontab
    • 外部接口:容联云、QQ互联、支付宝

工程创建和配置

创建工程

美多商城项目源代码采用**远程仓库托管**。

1. 准备项目代码仓库

1.源码托管网站

2.创建源码远程仓库:meiduo_project

2. 克隆项目代码仓库

1.进入本地项目目录

$ mkdir ~/projects
$ cd projects/

2.克隆仓库

$ git clone https://gitee.com/zjsharp/meiduo_project.git

3. 创建美多商城工程

1.进入本地项目仓库

$ cd ~/projects/meiduo_project/

2.创建美多商城虚拟环境,安装Django框架

$ mkvirtualenv -p python3 meiduo_mall
$ pip install django==1.11.11

3.创建美多商城Django工程

$ django-admin startproject meiduo_mall

创建工程完成后:运行程序,测试结果。

配置开发环境

美多商城项目的环境分为**开发环境生产环境**。

  • 开发环境:用于编写和调试项目代码。
  • 生产环境:用于项目线上部署运行。

1. 新建配置文件

  1. 准备配置文件目录

    • 新建包,命名为settings,作为配置文件目录
  2. 准备开发和生产环境配置文件

    • 在配置包settings中,新建开发和生产环境配置文件
  3. 准备开发环境配置内容

    • 将默认的配置文件settings.py中内容拷贝至dev.py

2. 指定开发环境配置文件

配置完成后:运行程序,测试结果。

配置Jinja2模板引擎

美多商城的模板采用**Jinja2模板引擎**。

1. 安装Jinja2扩展包

$ pip install Jinja2

2. 配置Jinja2模板引擎

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',  # jinja2模板引擎
        '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. 补充Jinja2模板引擎环境

1.创建Jinja2模板引擎环境配置文件

2.编写Jinja2模板引擎环境配置代码

from jinja2 import Environment
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse


def jinja2_environment(**options):
    env = Environment(**options)
    env.globals.update({
        'static': staticfiles_storage.url,
        'url': reverse,
    })
    return env


"""
确保可以使用模板引擎中的{{ url('') }} {{ static('') }}这类语句 
"""

3.加载Jinja2模板引擎环境

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',  # jinja2模板引擎
        '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',
            ],
            # 补充Jinja2模板引擎环境
            'environment': 'meiduo_mall.utils.jinja2_env.jinja2_environment', 
        },
    },
]

配置完成后:运行程序,测试结果。

配置MySQL数据库

美多商城数据存储服务采用**MySQL数据库**。

1. 新建MySQL数据库

1.新建MySQL数据库:meiduo_mall

$ create database meiduo charset=utf8;

2.新建MySQL用户

$ create user itheima identified by '123456';

3.授权itcast用户访问meiduo_mall数据库

$ grant all on meiduo.* to 'itheima'@'%';

4.授权结束后刷新特权

$ flush privileges;

2. 配置MySQL数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 数据库引擎
        'HOST': '127.0.0.1', # 数据库主机
        'PORT': 3306, # 数据库端口
        'USER': 'itheima', # 数据库用户名
        'PASSWORD': '123456', # 数据库用户密码
        'NAME': 'meiduo' # 数据库名字
    },
}

可能出现的错误

  • Error loading MySQLdb module: No module named 'MySQLdb'.

出现错误的原因:

  • Django中操作MySQL数据库需要驱动程序MySQLdb
  • 目前项目虚拟环境中没有驱动程序MySQLdb

解决办法:

  • 安装PyMySQL扩展包
  • 因为MySQLdb只适用于Python2.x的版本,Python3.x的版本中使用PyMySQL替代MySQLdb

3. 安装PyMySQL扩展包

1.安装驱动程序

$ pip install PyMySQL

2.在工程同名子目录的__init__.py文件中,添加如下代码:

from pymysql import install_as_MySQLdb


install_as_MySQLdb()

配置完成后:运行程序,测试结果。

配置Redis数据库

美多商城数据缓存服务采用**Redis数据库**。

1. 安装django-redis扩展包

1.安装django-redis扩展包

$ pip install django-redis

2.django-redis使用说明文档

点击进入文档

2. 配置Redis数据库

CACHES = {
    "default": { # 默认
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    "session": { # session
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

default:

  • 默认的Redis配置项,采用0号Redis库。

session:

  • 状态保持的Redis配置项,采用1号Redis库。

SESSION_ENGINE

  • 修改session存储机制使用Redis保存。

SESSION_CACHE_ALIAS:

  • 使用名为"session"的Redis配置项存储session数据

配置完成后:运行程序,测试结果。

配置工程日志

美多商城的日志记录采用logging模块

1. 配置工程日志

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(os.path.dirname(BASE_DIR), 'logs/meiduo.log'),  # 日志文件的位置
            'maxBytes': 300 * 1024 * 1024,
            'backupCount': 10,
            'formatter': 'verbose'
        },
    },
    'loggers': {  # 日志器
        'django': {  # 定义了一个名为django的日志器
            'handlers': ['console', 'file'],  # 可以同时向终端与文件中输出日志
            'propagate': True,  # 是否继续传递日志信息
            'level': 'INFO',  # 日志器接收的最低日志级别
        },
    }
}

2. 准备日志文件目录

3. 日志记录器的使用

import logging

  
  
# 创建日志记录器
  
  
logger = logging.getLogger('django')
  
  
# 输出日志
  
  
logger.debug('测试logging模块debug')
logger.info('测试logging模块info')
logger.error('测试logging模块error')

4. Git管理工程日志

提示1:

  • 开发过程中,产生的日志信息不需要代码仓库进行管理和记录。

提示2:

  • 建立代码仓库时,生成的忽略文件中已经默认忽略掉了 *.log

问题:

  • logs文件目录需求被Git仓库记录和管理。
  • 当把 *.log 都忽略掉后,logs文件目录为空。
  • 但是,Git是不允许提交一个空的目录到版本库上的。

解决:

  • 在空文件目录中建立一个 .gitkeep 文件,然后即可提交。

配置完成后:运行程序,测试结果。

5. 知识要点

  1. 本项目最低日志等级设置为:INFO
  2. 创建日志记录器的方式:
logger = logging.getLogger('django')
  1. 日志记录器的使用:
logger.info('测试logging模块info')
  1. 在日志loggers选项中可以指定多个日志记录器

配置前端静态文件

美多商城项目中需要使用静态文件,比如 css、images、js 等等。

1. 准备静态文件

2. 指定静态文件加载路径

STATIC_URL = '/static/'

  
  
# 配置静态文件加载路径
  
  
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

配置完成后:运行程序,测试结果。

用户注册

展示用户注册页面

未完待续, 同学们请等待下一期

全套笔记和代码自取地址: 请移步这里

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~

标签:项目,配置,django,Jinja2,模板,日志,Django,结构设计
From: https://blog.51cto.com/u_13578013/9088256

相关文章

  • 语音AI小夜灯项目
    一、项目简介使用ESP32-S3N8R8模块作为主控芯片,S3内核增加了用于加速神经网络计算和信号处理等的指令,这使得我们可以使用它来快速解析训练好的语音模型进行语音识别的功能。二、原理解析本项目由四个部分组成,电源部分、LED照明部分、主控部分、语音识别拓展部分,本项目主要是通过麦......
  • 记录Springboot项目部署到服务器
    搞了一个月,开发了一个缩减版的管理系统,主要功能:对于进入海康门禁的老师,需要填报使用记录。用Springboot开发真的是便捷,专注于业务开发,不关心底层和架构。第一步:搭建配置服务器服务器:虚拟机Windows2016Server 64bit,内存32G,磁盘400GMysql:8.0.34Springboot:3.0.11IDEA:2023.1Ja......
  • java接口自动化系列(03):创建自动化框架项目
     创建maven项目 输入GroupId:com.qzcsbj输入ArtifactId:apiJavaAutoTest 输入Projectname:apiJavaAutoTest 配置maven修改Mavenhomedirectory和Usersettingsfile(settings.xml文件配置了阿里云镜像地址) 添加pom依赖testng<!--https://mvnrepository.com/artifact/org.testng......
  • 面试官:眉毛胡子一把抓,这就是你设计的项目结构
    Java经典项目目录结构大家好,我是JavaPub。很多刚工作的同学进入公司,拿到前辈们写的高级代码,眼前一亮希望可以从里边得到成长。今天和大家聊一聊Java项目目录结构。因为一些原因,我们在学校里学到的知识会滞后一些。但是好在万变不离其宗。接下来这个项目结构可以覆盖绝大......
  • github短视频去除水印项目Douyin_TikTok_Download_API介绍
    当下正值短视频盛行的时代。在我们浏览短视频的同时,经常能发现一些精美的图片、引人入胜的文案以及吸引眼球的视频,想要将它们保存到本地。然而,保存下来的图片或视频通常伴随着不太愉悦的水印,这显著降低了使用体验。因此,我时常思考是否存在途径能够下载一些无水印的图片。虽然有许多......
  • 项目经理怎么写出高质量年终总结?记住这很有用
    对于项目经理而言,写好年终总结是一项很重要的基本功。年终总结不只是对自己过去一年工作的复盘,也是做好未来工作的基础和前提。因此,学会写出一份好的年终总结对项目经理是大有裨益的。下面,小编就来分享写好一份优秀年终总结的秘诀,有需要的同学可以分享转发给更多朋友哦~  写年终......
  • 亚信安慧AntDB数据库两项目分别入选2023“星河”标杆、优秀案例
    近日,由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会(CCSATC601)共同组织的第七届大数据“星河(Galaxy)”案例评选结果公示,亚信安慧AntDB数据库两项目入选,其中“基于AntDB的CRM系统全域数据库替换项目”获评标杆案例,“中国广电5G核心业务支撑系统数据库建设方案”......
  • 极智项目 | 实战Mxnet戴口罩检测
    欢迎关注我的公众号[极智视界],获取我的更多项目分享大家好,我是极智视界,本文来介绍实战Mxnet戴口罩检测项目。本文介绍的实战Mxnet戴口罩检测项目,提供完整的可以一键执行的项目工程源码,获取方式有两个:这是这个系列的第三篇(虽然这个系列估计想看的人并不多,但是既然开了拔就......
  • 架构师如何把握项目质量?
    需求分析阶段如果这个需求分析不是自己亲自做的,需要和执行人沟通,通过提出问题,确保当事人正确识别了利益相关者的意图和业务诉求,也便于自己对下面进行阶段的把控。设计阶段设计评审时,设计者需要对相关改动模块做说明,证明其对模块的了解程度。并分析清楚代码改动点和影响。详细设计中......
  • 接手了个项目,被if..else搞懵逼了
    项目会最终沦为屎山,但是作为一个有追求的研发,我们就应当从每个小的ifelse着手,至少让当前这个项目在你维护期间,让其发展成屎山的速度变慢一些,或者能替之前的老前辈还掉一些技术债才是最好的,各位小伙伴你们觉得呢?背景领导:“这个项目,今后就给你维护了啊,仔细点......