后端模块设计
First Post:
Last Update:
Word Count:
Read Time:
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 定义数据模型,根据业务需求建立模型间关系。
主要模型关系图:

主要数据表设计:
- 用户表 (
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等,这些表存储用户与论坛帖子、评论、游戏等的关联信息。
- 用户表 (
关系定义:
- 一对多关系:如
ForumsPost和ForumsComment,一个帖子可以有多个评论。 - 多对多关系:如
ForumsPostCollectUsers表展示了论坛帖子(ForumsPost)与用户(UsersUsers)之间的多对多关系。一个用户可以收藏多个帖子,而一个帖子也可以被多个用户收藏。 - 一对一关系:如
UsersUsers和StocksUserassets,表示用户与其资产信息的关系。
- 一对多关系:如
表间关系的特点
- 多个表通过外键和联合主键建立关联,形成复杂的数据关系网络。
- 某些表如
DjangoCeleryBeatPeriodictask和DjangoCeleryBeatCrontabschedule等用于支持后台任务和调度。 - 用户行为和交互通过多个关联表进行跟踪,例如论坛帖子的点赞、收藏等。
缓存机制
- 使用 Redis 作为缓存后端:Redis 用于缓存常用查询、会话数据和用户认证信息等,提高应用性能并减轻对 MySQL 数据库的压力。Redis 的高性能键值存储能力,非常适合作为缓存解决方案。
安全性和异常处理
数据安全:实施常规安全措施,如输入验证、SQL 注入防护和敏感数据加密。
异常处理:通过 Django 的异常处理机制,实现错误捕获和用户友好的错误响应。