后端模块设计

First Post:

Last Update:

Word Count:
2k

Read Time:
6 min

后端模块设计

后端架构

  • 服务器架构:采用 Django REST framework,一个基于 Django 的强大且灵活的 Web API 框架,适合于构建可维护、可扩展的 Web API。支持多种认证方式,易于集成第三方应用。
  • 服务间通信机制:利用 Django 的内部机制和中间件来进行模块间的数据传递和消息通知,确保高效且安全的服务间通信。

核心模块和功能实现

  • 数据处理:

    • 数据库管理: 使用 Django ORM 管理数据库交互,包括数据的增删查改以及复杂查询优化。
    • 业务逻辑处理: 利用 Django REST framework 视图(如 APIView)处理具体业务逻辑。
    • 数据序列化: 使用 Django REST framework 的序列化器进行数据格式的转换,支持复杂数据结构。
  • 第三方服务集成:

    • 电子邮件通知: 通过集成网易企业邮箱服务,实现通知和电子邮件发送。
  • 用户管理(users):

    • 继承与扩展 Django 用户认证系统: 用于用户注册和登录,支持微信登录。
    • 用户模型扩展: 扩展用户模型以包括额外字段(如头像等),满足特定业务需求。
    • 权限管理: 实现基于角色的权限控制,利用 Django Permission 模型进行细粒度的权限管理。
  • 股票信息处理(stocks):

    • 股票数据展示: 实现股票信息的实时更新和查询,如价格、交易量等。
    • 用户交易功能: 提供股票买卖、持仓查询、资产管理等功能。
  • 新闻与公告(news):

    • 股市新闻聚合: 自动收集和展示股市新闻、公司公告等。
    • 财经报告解读: 提供公司财报、研究报告的摘要和分析。
  • 模拟交易游戏(games):

    • 比赛创建与管理: 允许用户创建和参加模拟交易比赛,管理比赛规则和进度。
    • 交易模拟: 提供模拟股市环境,进行虚拟交易和资产管理。
  • 论坛交流(forums):

    • 帖子管理与互动: 支持发帖、评论、回复等,实现社区互动。
    • 社交功能: 提供点赞、收藏等功能,增强用户参与度。
  • 搜索功能(search):

    • 全站搜索: 实现对新闻、股票信息、论坛内容的全文搜索。
    • 搜索结果优化: 提供分类结果等功能,优化用户搜索体验。

异步任务处理与 Celery

  • Celery 集成:集成 Celery 进行异步任务处理,用于处理后台任务和定时任务。Celery 提供了灵活的配置和多种任务执行选项。
  • 使用 Redis 作为消息代理:选择 Redis 作为 Celery 的消息代理,负责传递消息。Redis 以其高性能和低延迟特性,非常适合作为消息传递系统的后端。
  • 任务处理流程:
    • 任务发布:Django 应用将异步任务发布到 Redis 消息队列中。
    • 任务消费:Celery 工作进程监控消息队列,捕获新任务并进行处理。
    • 结果存储:处理结果存储回数据库中,或者直接返回给用户。
  • 容错与重试机制:配置 Celery 的重试策略,处理任务执行失败的情况。
  • 定时任务与计划任务:使用 Celery Beat 执行周期性任务,如数据备份、定期清理日志等。

接口规范

  • API 设计:使用 Django REST framework 提供的 RESTful API,定义清晰、标准化的接口。

  • 请求和响应格式:使用JSON格式的数据进行请求与响应。

  • 安全协议:全站采用 HTTPS 保障数据传输安全。对所有敏感数据进行加密处理。

  • 认证和授权机制:系统综合利用了 PyJWT 和 OAuth 2.0 来实现全面的身份验证和授权管理。

    • 支持 OAuth 2.0 通过微信登录:小程序集成了微信登录,遵循 OAuth 2.0 协议,用户可以使用自己的微信账号安全地登录小程序。在这个过程中,小程序首先从微信获取授权码,然后交换获得访问令牌(Access Token),最终使用这个访问令牌获取用户在微信上的基本信息。这一流程确保了用户身份的安全验证,同时简化了登录步骤。
    • 使用 PyJWT 生成 Token:在用户通过微信登录小程序后,系统使用 PyJWT 生成 JSON Web Tokens(JWT),这是一种紧凑且自包含的方式,用于在各方之间安全地传递信息。每个 JWT 包含了验证所需的所有信息,这使得系统能够高效地进行身份验证和信息传输。
    • 自定义认证类:系统通过继承 Django REST framework(DRF)的认证类来自定义认证过程。这一自定义认证类使用 JWT 来确认和验证用户的身份。当用户进行后续请求时,系统通过解析和验证 JWT 来确认用户身份,确保安全性和有效性。

数据库设计

  • 数据库类型:主要使用 MySQL 作为存储数据库。适合复杂的查询和大量数据的处理。

  • 数据模型和关系:使用 Django ORM 定义数据模型,根据业务需求建立模型间关系。

  • 主要模型关系图:

    models

  • 主要数据表设计:

    • 用户表 (UsersUsers):存储用户基本信息,如登录名、密码、电子邮件、头像、登录时间等。
    • 用户权限表 (AuthPermission, UsersUsersUserPermissions):定义系统权限和用户所拥有的权限。
    • Celery 相关表 (DjangoCeleryBeatClockedschedule, DjangoCeleryBeatCrontabschedule, DjangoCeleryBeatIntervalschedule, DjangoCeleryBeatPeriodictask, DjangoCeleryBeatSolarschedule):存储 Celery 定时任务的计划和执行情况。
    • 论坛帖子表 (ForumsPost):存储论坛帖子的信息,如标题、内容、创建时间。
    • 论坛评论表 (ForumsComment):存储用户对论坛帖子的评论信息。
    • 论坛回复表 (ForumsReply):存储用户对论坛评论的回复信息。
    • 比赛表 (GamesGame):存储比赛的基本信息,如名称、描述、开始和结束时间。
    • 比赛公告表 (GamesGamenotice):存储比赛公告信息。
    • 新闻表 (NewsNews, NewsAnotice, NewsResearchreport):存储新闻、公告和研报的相关信息。
    • 用户股市资产表 (StocksUserassets):存储用户在股市模拟中的资产信息。
    • 用户股市持仓表 (StocksUserposition):存储用户在股市模拟中的持仓信息。
    • 用户交易记录表 (StocksUsertransrecords):存储用户的股市交易记录。
    • 用户与各类内容的关联表:如 ForumsCommentLikeUsers, ForumsPostCollectUsers, ForumsPostLikeUsers, ForumsReplyLikeUsers, GamesGameAdmins, GamesGamePlayers, GamesGameassets, GamesGamenoticeReaders 等,这些表存储用户与论坛帖子、评论、游戏等的关联信息。
  • 关系定义:

    • 一对多关系:如 ForumsPostForumsComment,一个帖子可以有多个评论。
    • 多对多关系:如ForumsPostCollectUsers 表展示了论坛帖子(ForumsPost)与用户(UsersUsers)之间的多对多关系。一个用户可以收藏多个帖子,而一个帖子也可以被多个用户收藏。
    • 一对一关系:如 UsersUsersStocksUserassets,表示用户与其资产信息的关系。
  • 表间关系的特点

    • 多个表通过外键和联合主键建立关联,形成复杂的数据关系网络。
    • 某些表如 DjangoCeleryBeatPeriodictaskDjangoCeleryBeatCrontabschedule 等用于支持后台任务和调度。
    • 用户行为和交互通过多个关联表进行跟踪,例如论坛帖子的点赞、收藏等。

缓存机制

  • 使用 Redis 作为缓存后端:Redis 用于缓存常用查询、会话数据和用户认证信息等,提高应用性能并减轻对 MySQL 数据库的压力。Redis 的高性能键值存储能力,非常适合作为缓存解决方案。

安全性和异常处理

  • 数据安全:实施常规安全措施,如输入验证、SQL 注入防护和敏感数据加密。

  • 异常处理:通过 Django 的异常处理机制,实现错误捕获和用户友好的错误响应。