web项目搭建

技术栈

前端

        vue3

后端

        python

        django

pip install django==4.0 #版本号

        rest-framework

pip install djangorestframework  -i 

数据库

        mysql

        redis

需求分析

首页

导航菜单(顶级菜单,侧边栏菜单,课程分类菜单)

轮播广告图

快捷登陆注册和退出登录

课程搜索

新课推荐

热门课程推荐

登录注册

 用户登录、第三方验证码、多条件登录、记住密码、短信发送、短信冷却倒计时、jwt认证

课程列表

学习方向、课程分类、课程列表、课程多条件筛选展示、课程分类展示、课程分页展示、课程章节课时展示、课程优惠策略

 

课程详情

课程信息展示、优惠活动设置、视频播放、富文本编辑器  

购物车

购物车商品列表、添加商品、删除商品、勾选商品状态、商品结算、订单生成、唯一订单号生成

商品结算

订单商品信息列表、订单信息展示、积分计算功能、优惠券、第三方支付平台接口集成

购买成功

订单状态切换,购物课程记录展示,学习记录

个人中心

我的订单、订单状态改变

我的课程及课程学习

视频加密播放,课件下载,进度跟踪

数据库需要创建的表以及表关系

1:N ---- 一对多

M:N ---- 多对多

环境搭建

创建虚拟环境

# 在项目文件夹下(和子应用同级):
  python -m venv .venv
# 进入虚拟环境:
  cd .venv/Scripts/
# 进入虚拟环境:
  activate
# 退出虚拟环境
  deactivate

技术选型

服务器架构

外部依赖

  1. 注册支付宝的开发者账号。支付宝开放平台

  2. 注册阿里云账号。

    如果可以购买一个ESC云服务器和购买一个心仪的域名

    阿里云ICP备案(15个工作日):网站备案_ICP备案_备案迁移_App备案_小程序备案_备案-阿里云

    公安部备案(2-3个工作日):全国互联网安全管理平台

    注意:服务器和域名最好是同一个平台购买,否则备案有问题的,到时候还需要迁移域名到同一个平台。

  3. 注册容联云短信接口平台的账号 。

  4. 注册保利威视频加密服务平台的账号[有个7天免费的测试开发时间]

  5. 注册gitee[码云]的账号,托管项目代码。

  6. 开通阿里云OSS对象存储。

  7. 注册一个163邮箱,发送邮件。

服务端项目搭建

创建服务端项目

# 创建api服务端项目
django-admin startproject fuguangapi

调整目录

webapi/                  # 工程目录
  ├── docs/                 # 项目相关资料保存目录
  │    ├── 技术开发文档.md   # touch 技术开发文档.md
  │    ├── requirements.txt
  │    ├── fuguang.sql
  ├── fuguangweb/         # 前端项目目录[该目录先不用创建]
  ├── fuguangapi/         # api服务端项目目录
       ├── manage.py
       ├── logs/            # 项目运行时/开发时日志目录
       ├── fuguangapi/    # 项目主应用,开发时的代码保存
       │    ├── apps/       # 开发者的代码保存目录,以模块[子应用]为目录保存
       │    ├── libs/       # 第三方类库的保存目录[别人写好的,开源的第三方组件、模块]
       │    ├── settings/
       │         ├── dev.py   # 项目开发时的本地配置[不需要上传到线上或者服务器]
       │         ├── prod.py  # 项目上线时的运行配置
       │    ├── urls.py       # 总路由
       │    └── utils/        # 项目各个子应用所使用的公共函数类库[自己开发的组件]
       └── scripts/           # 保存项目运营时的维护项目脚本文件

 服务端项目初始化

这里我们基于django开发, Django 使用 Python 内置的logging 模块处理系统日志。

django官方日志配置文档:日志 | Django 文档 | Django

日志信息从严重程度由高到低,一共分了5个等级。

CRITICAL(fatal):致命错误,程序根本跑不起来。
ERROR:运行错误,程序运行发生错误的地方时就会退出程序。
WARNING:运行警告,程序运行发生警告的地方时会显示警告提示,但是程序会继续往下执行。
INFO:运行提示,一般的系统信息,并非日志
DEBUG:调试信息,排查故障时使用的低级别系统信息

在settings/dev.py文件中追加如下配置:

# 日志
LOGGING = {
    'version': 1,  # 使用的日志模块的版本,目前官方提供的只有版本1,但是官方有可能会升级,为了避免升级出现的版本问题,所以这里固定为1
    'disable_existing_loggers': False,  # 是否禁用其他的已经存在的日志功能?肯定不能,有可能有些第三方模块在调用,所以禁用了以后,第三方模块无法捕获自身出现的异常了。
    'formatters': {  # 日志格式设置,verbose或者simple都是自定义的
        'verbose': {  # 详细格式,适合用于开发人员不在场的情况下的日志记录。
            # 格式定义:https://docs.python.org/3/library/logging.html#logrecord-attributes
            # levelname 日志等级
            # asctime   发生时间
            # module    文件名
            # process   进程ID
            # thread    线程ID
            # message   异常信息
            'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
            'style': '{',  # 变量格式分隔符
        },
        'simple': {  # 简单格式,适合用于开发人员在场的情况下的终端输出
            'format': '{levelname} {message}',
            'style': '{',
        },
    },
    'filters': {  # 过滤器
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {  # 日志处理流程,console或者mail_admins都是自定义的。
        'console': {
            'level': 'DEBUG',  # 设置当前日志处理流程中的日志最低等级
            'filters': ['require_debug_true'],  # 当前日志处理流程的日志过滤
            'class': 'logging.StreamHandler',  # 当前日志处理流程的核心类,StreamHandler可以帮我们把日志信息输出到终端下
            'formatter': 'simple'  # 当前日志处理流程的日志格式
        },
        # 'mail_admins': {
        #     'level': 'ERROR',                  # 设置当前日志处理流程中的日志最低等级
        #     'class': 'django.utils.log.AdminEmailHandler',  # AdminEmailHandler可以帮我们把日志信息输出到管理员邮箱中。
        #     'filters': ['special']             # 当前日志处理流程的日志过滤
        # }
        'file': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            # 日志位置,日志文件名,日志保存目录logs必须手动创建,注意目录位置,跟主应用统计目录,所以添加parent
            'filename': BASE_DIR.parent / "logs/fuguang.log",
            # 单个日志文件的最大值,这里我们设置300M
            'maxBytes': 300 * 1024 * 1024,
            # 备份日志文件的数量,设置最大日志数量为10
            'backupCount': 10,
            # 日志格式:详细格式
            'formatter': 'verbose'
        },
    },
    'loggers': {  # 日志处理的命名空间
        'django': {
            'handlers': ['console', 'file'],  # 当基于django命名空间写入日志时,调用那几个日志处理流程
            'propagate': True,  # 是否在django命名空间对应的日志处理流程结束以后,冒泡通知其他的日志功能。True表示允许
        },
    }
}

异常处理

新建utils/exceptions.py用于保存异常处理的工具函数代码

from rest_framework.views import exception_handler

from django.db import DatabaseError
from rest_framework.response import Response
from rest_framework import status

import logging

logger = logging.getLogger('django')


def custom_exception_handler(exc, context):
    """
    自定义异常处理
    :param exc: 异常类
    :param context: 抛出异常的上下文
    :return: Response响应对象
    """
    # 调用drf框架原生的异常处理方法
    response = exception_handler(exc, context)

    if response is None:
        view = context['view']
        if isinstance(exc, DatabaseError):
            # 数据库异常
            logger.error('[%s] %s' % (view, exc))
            response = Response({'message': '服务器内部错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE)

    return response

settings/dev.py配置文件中添加自定义异常处理的配置:

# drf配置
REST_FRAMEWORK = {
    # 自定义异常处理
    'EXCEPTION_HANDLER': 'fuguangapi.utils.exceptions.custom_exception_handler',
}

数据库配置

创建数据库(cmd)

mysql -uroot -p123
create database fuguang;

使用pycharm连接mysql数据库

配置mysql数据库链接

# pip install pymysql  # 常见的数据库连接驱动:如果已经安装了,就不必要执行了。
pip install django-db-connection-pool
pip install cryptography

 打开settings/dev.py文件,并配置

DATABASES = {
    # pycharm自带的小数据库记得注释!!!
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
    'default': {
        # 'ENGINE': 'django.db.backends.mysql',
        'ENGINE': 'dj_db_conn_pool.backends.mysql',
        'NAME': 'fuguang',
        'PORT': 3306,
        'HOST': '127.0.0.1',
        'USER': 'root', # mysql用户名
        'PASSWORD': '111111', # mysql密码
        'OPTIONS': {
            'charset': 'utf8mb4', # 连接选项配置,mysql8.0以上无需配置
        },
        'POOL_OPTIONS' : {      # 连接池的配置信息
            'POOL_SIZE': 10,    # 连接池默认创建的链接对象的数量
            'MAX_OVERFLOW': 10  # 连接池默认创建的链接对象的最大数量
        }
    }
}

在项目主应用下的 fuguangapi.__init__.py中导入pymysql,如果使用的是MySQLdb(mysqlclient),不要加下面的这段代码。

import pymysql

pymysql.install_as_MySQLdb()

缓存配置

安装

pip install django-redis

在settings/dev.py配置中添加一下代码:

# redis configration
# 设置redis缓存
CACHES = {
    # 默认缓存
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        # 项目上线时,需要调整这里的路径
        # "LOCATION": "redis://:密码@IP地址:端口/库编号",
        "LOCATION": "redis://:123456@127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100},
        }
    },
    # 提供给admin运营站点的session存储
    "session": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://:123456@127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100},
        }
    },
    # 提供存储短信验证码
    "sms_code":{
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://:123456@127.0.0.1:6379/2",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100},
        }
    }
}

# 设置用户登录admin站点时,记录登录状态的session保存到redis缓存中
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# 设置session保存的位置对应的缓存配置项
SESSION_CACHE_ALIAS = "session"

django-redis提供了get_redis_connection的方法,通过调用get_redis_connection方法传递redis的配置名称可获取到redis的连接对象,通过redis连接对象可以执行redis命令

使用实例

from django_redis import get_redis_connection
// 链接redis数据库
redis_conn = get_redis_connection("sms_code")

跨域问题

这里展示的是后端配置跨域

安装插件

pip install django-cors-headers

配置信息

在settings中配置:

# 注册--corsheaders
  INSTALLED_APPS = [
	...
    'corsheaders',  # 跨域
 	...
  ]

添加中间键

在settings中配置:

# 添加跨域中间件
MIDDLEWARE = [ 
  'corsheaders.middleware.CorsMiddleware',
  ...
  # 关闭csrf验证
  # 'django.middleware.csrf.CsrfViewMiddleware',  
  ...
]

配置访问规则或白名单

# 允许所有域名跨域(优先选择)
CORS_ORIGIN_ALLOW_ALL = True

# 配置白名单
# CORS_ORIGIN_WHITELIST = (
#     '*'
#     # '127.0.0.1:8000',
#     # 'localhost:8000',
#     # '127.0.0.1:8080',
#     # 'localhost:8080',
#'ads-cms-api.aataotao.com:8000'
#'taoduoduo-test.oss-cn-#shenzhen.aliyuncs.com:80',  # 线上
# #'10.0.2.187:8080'  # 本地
#)

以上就是我们项目的整个配置流程,后面会专门写一篇将服务端部署在linux上的文章

欢迎来交流啊~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值