{"id":18668341,"url":"https://github.com/ninechapter-algorithm/django-twitter","last_synced_at":"2025-09-01T21:34:45.304Z","repository":{"id":41572796,"uuid":"441072115","full_name":"ninechapter-algorithm/django-twitter","owner":"ninechapter-algorithm","description":"Twitter后端项目实战-Django，FB原厂工程师源码，全部视频戳下方链接：","archived":false,"fork":false,"pushed_at":"2021-12-24T02:27:01.000Z","size":258,"stargazers_count":15,"open_issues_count":0,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-25T20:11:37.181Z","etag":null,"topics":["django","twitter"],"latest_commit_sha":null,"homepage":"https://www.jiuzhang.com/course/89/?utm_source-githubjenny","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ninechapter-algorithm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-23T05:27:42.000Z","updated_at":"2025-03-01T15:10:01.000Z","dependencies_parsed_at":"2022-08-20T14:10:19.507Z","dependency_job_id":null,"html_url":"https://github.com/ninechapter-algorithm/django-twitter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninechapter-algorithm%2Fdjango-twitter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninechapter-algorithm%2Fdjango-twitter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninechapter-algorithm%2Fdjango-twitter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninechapter-algorithm%2Fdjango-twitter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ninechapter-algorithm","download_url":"https://codeload.github.com/ninechapter-algorithm/django-twitter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248498567,"owners_count":21114141,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","twitter"],"created_at":"2024-11-07T08:42:18.372Z","updated_at":"2025-04-12T00:23:42.936Z","avatar_url":"https://github.com/ninechapter-algorithm.png","language":"Python","readme":"# Twitter 后端系统 - Python 项目实战\n\n![license](https://img.shields.io/badge/%E4%B9%9D%E7%AB%A0%E7%AE%97%E6%B3%95-jiuzhangsuanfa-blue)\n\n|:books: |:bulb: |:house: |:rocket: |:checkered_flag:|:email:|\n| :--------: | :---------: | :------: | :------: | :------: | :------: |\n| [介绍](#介绍) | [技术栈](#技术栈) | [信息流系统](#信息流系统) | [演示](#演示) | [后续内容](#后续内容) | [联系作者](#联系作者) |\n\n## 介绍\n**Twitter 后端系统**：从零设计一个高并发的信息流系统，完整搭建对标P8（L5）水准的项目，可用于毕设、简历等\n\n**涉及到的重点知识包括：**\n-  Pull \u0026 Push 模型分析对比\n- 高性能系统必备消息队列 Message Queue 应用场景\n- Denormalization 去标准化（冗余存储技术）\n\n**涉及的面试难点包括：**\n- 如何分别测试登录用户和未登录用户？\n- 如何做反向查询？\n- 如何设计数据库表达？\n- 如何让部分用户看到某个新功能，其他用户看到的就是功能？（灰度测试）\n- comments的API该如何设计？\n\n**建议访问课程以获取更多项目源码：**\n[https://www.jiuzhang.com/course/89/](https://www.jiuzhang.com/course/89/?utm_source=sc-github-zyq \"https://www.jiuzhang.com/course/89/\")\n \n## 技术栈\n| 技术                             | 官网                                                                                       |\n|----------------------------------|--------------------------------------------------------------------------------------------|\n|Django                            |[https://www.djangoproject.com/](https://www.djangoproject.com/)                            |\n|Django REST framework             |[https://www.django-rest-framework.org/](https://www.django-rest-framework.org/)            |\n|MySQL                             |[https://www.mysql.com/](https://www.mysql.com/)                                            |\n|HBase                             |[https://hbase.apache.org/](https://hbase.apache.org/)                                      |\n|Redis                             |[https://redis.io/](https://redis.io/)                                                      |\n|Memcached                         |[http://memcached.org/](http://memcached.org/)                                              |\n|RabbitMQ                          |[https://www.rabbitmq.com/](https://www.rabbitmq.com/)                                      |\n\n## 信息流系统\n在设计信息流系统时，一般有两种信息流模式：`拉(pull)模式` 和 `推(push)模式`，如果去设计一个如 Tweet 的社交网络服务系统：\n\n\n`拉(pull)模式`：在 `拉(pull)模式`，下一个人发帖只在 Tweet 表单中产生一条新记录。\n\n`推(push)模式`：在 `推(push)模式`，下一个人发帖除了在 Tweet 表单中产生一条新纪录，还会产生 N 条 NewsFeed 记录，N 是粉丝的个数。\n\n本项目选择使用 `推(push)模式`，流程图如下：\n\n![](doc/PushModel.jpg)\n\n## 演示\n\n本项目为 Django 前后端分离项目，以后端 API 开发为主，界面基于 Django REST framework，相关演示图如下：\n\n![](doc/demo-1.jpg)\n\n\u003cbr/\u003e\n\n![](doc/demo-2.jpg)\n\n## 后续内容\n\n* 推文模块 Tweet \n* 好友关系模块 Friendship\n* 信息交互模块 NewsFeed\n  * 代码结构中引入 Service 处理 views 和 models 之间的复杂逻辑\n* 评论模块 Comment\n  * 用 decorators 实现丢失参数检测的，优化代码逻辑\n  * 在 Tweet 中带上所有的评论信息\n* 点赞模块 Like\n  * 设计一个通用的点赞类，可以同时记录对 Tweet 的点赞和对 Comment 的点赞\n  * 使用 Serializer 的继承关系避免重复代码\n* 用 django-notification 增加评论点赞关注的消息提醒\n  * 基于第三方开源项目自定制 API\n  * 使用 Service 类包装复杂逻辑\n* 图像上传\n  * 增加 UserProfile Model 实现头像，昵称等信息的存储\n  * django 的 listener 机制\n  * OneToOneField\n  * Tweet 图像上传\n* 翻页 Pagination 与缓存 Cache\n  * 实现 user timeline 和 newsfeed 的翻页 Pagination\n  * 通过缓存优化好友关系与用户信息\n* 使用 Redis 缓存用户推文\n  * 获取某个用户的 tweets\n  * QuerySet 惰性加载\n  * Redis RPUSH 操作\n  * 增加 Cache 来加速 NewsFeed 的访问效率\n* 增加 Message Queue 来实现 fanout\n  * Django 接入消息队列的第三方库：Celery\n* 增加限流器 Rate Limiter 用于限制恶意访问和减少不必要的数据库操作\n  * 安装 Django RateLimiter 来进行访问频次限制\n* ......\n\n## 联系作者\n\n添加个人微信号发送关键词【Github】获取更多源码\n\n![doudou.jpg](https://s2.loli.net/2021/12/24/eoTAk8m6KfzUuQJ.jpg)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fninechapter-algorithm%2Fdjango-twitter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fninechapter-algorithm%2Fdjango-twitter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fninechapter-algorithm%2Fdjango-twitter/lists"}