{"id":22848313,"url":"https://github.com/hellogithub-team/hellodjango-rest-framework-tutorial","last_synced_at":"2025-07-10T22:05:05.148Z","repository":{"id":41915057,"uuid":"254352242","full_name":"HelloGitHub-Team/HelloDjango-REST-framework-tutorial","owner":"HelloGitHub-Team","description":"完全免费、开源的 HelloDjango 系列教程之 django REST framework","archived":false,"fork":false,"pushed_at":"2023-02-08T00:00:52.000Z","size":5708,"stargazers_count":113,"open_issues_count":8,"forks_count":24,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-30T04:49:10.803Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.zmrenwu.com/courses/django-rest-framework-tutorial/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HelloGitHub-Team.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-04-09T11:26:12.000Z","updated_at":"2025-04-02T11:25:57.000Z","dependencies_parsed_at":"2025-04-30T04:49:11.975Z","dependency_job_id":"2923c30b-018f-4d3a-abd1-338fe0d74724","html_url":"https://github.com/HelloGitHub-Team/HelloDjango-REST-framework-tutorial","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/HelloGitHub-Team/HelloDjango-REST-framework-tutorial","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HelloGitHub-Team%2FHelloDjango-REST-framework-tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HelloGitHub-Team%2FHelloDjango-REST-framework-tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HelloGitHub-Team%2FHelloDjango-REST-framework-tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HelloGitHub-Team%2FHelloDjango-REST-framework-tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HelloGitHub-Team","download_url":"https://codeload.github.com/HelloGitHub-Team/HelloDjango-REST-framework-tutorial/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HelloGitHub-Team%2FHelloDjango-REST-framework-tutorial/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264673764,"owners_count":23647675,"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":[],"created_at":"2024-12-13T04:11:18.710Z","updated_at":"2025-07-10T22:05:05.124Z","avatar_url":"https://github.com/HelloGitHub-Team.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./cover.jpg\"/\u003e\n  \u003cbr\u003e\u003cstrong\u003eHelloDjango-REST-framework-tutorial\u003c/strong\u003e\u003cbr\u003e\n  \u003cstrong\u003e完全免费、开源的 HelloDjango 系列教程之 django REST framework 博客开发\u003c/strong\u003e。\u003cbr\u003e\n\u003c/p\u003e\n\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://raw.githubusercontent.com/521xueweihan/img/master/hellogithub/logo/weixin.png\"\u003e\u003cimg src=\"https://img.shields.io/badge/Talk-%E5%BE%AE%E4%BF%A1%E7%BE%A4-brightgreen.svg?style=popout-square\" alt=\"WeiXin\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://weibo.com/hellogithub\"\u003e\u003cimg src=\"https://img.shields.io/badge/%E6%96%B0%E6%B5%AA-Weibo-red.svg?style=popout-square\" alt=\"Sina Weibo\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n本项目延续自 [HelloDjango-blog-tutorial](https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial)，如果对 django 基础不是很熟悉，建议先学习  [HelloDjango - Django博客教程（第二版）](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/)，然后再进阶学习 django REST framework。\n\n虽然项目延续自 [HelloDjango-blog-tutorial](https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial)，但只要你已有 django 基础（ORM、类视图、表单等），就可以直接开启本教程。两个教程在内容上并无联系，只是本教程借用了上一个教程的项目结构以及数据模型（Model）的定义。\n\n## 分支说明\n\nmaster 分支为项目的主分支，每一步关键功能的开发都对应一篇详细的教程，并和历史提交以及标签一一对应。例如第一篇教程对应第一个 commit，对应标签为 step1，依次类推。\n\n## 资源列表\n\n- 教程首发 HelloGitHub 微信公众号和 [追梦人物的博客](https://www.zmrenwu.com/)，在线学习地址：[HelloDjango - django REST framework 教程](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/)\n- 上一个项目 HelloDjango-blog-tutorial 的 [源码仓库](https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial)\n\n## 本地运行\n\n可以使用 Virtualenv、Pipenv、Docker 等在本地运行项目，每种方式都只需运行简单的几条命令就可以了。\n\n\u003e **注意：**\n\u003e\n\u003e 因为博客全文搜索功能依赖 Elasticsearch 服务，如果使用 Virtualenv 或者 Pipenv 启动项目而不想搭建 Elasticsearch 服务的话，请先设置环境变量 `ENABLE_HAYSTACK_REALTIME_SIGNAL_PROCESSOR=no` 以关闭实时索引，否则无法创建博客文章。如果关闭实时索引，全文搜索功能将不可用。\n\u003e\n\u003e Windows 设置环境变量的方式：`set ENABLE_HAYSTACK_REALTIME_SIGNAL_PROCESSOR=no`\n\u003e\n\u003e Linux 或者 macOS：`export ENABLE_HAYSTACK_REALTIME_SIGNAL_PROCESSOR=no`\n\u003e\n\u003e 使用 Docker 启动则无需设置，因为会自动启动一个包含 Elasticsearch 服务的 Docker 容器。\n\n无论采用何种方式，先克隆代码到本地：\n\n```bash\n$ git clone https://github.com/HelloGitHub-Team/HelloDjango-REST-framework-tutorial.git\n```\n\n### Virtualenv\n\n1. 创建虚拟环境并**激活虚拟环境**，具体方法可参考基础教程中的：[开始进入 django 开发之旅：使用虚拟环境](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/59/#%E4%BD%BF%E7%94%A8%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83)\n\n2. 安装项目依赖\n\n   ```bash\n   $ cd HelloDjango-rest-framework-tutorial\n   $ pip install -r requirements.txt\n   ```\n\n3. 迁移数据库\n\n   ```bash\n   $ python manage.py migrate\n   ```\n\n4. 创建后台管理员账户\n\n   ```bash\n   $ python manage.py createsuperuser\n   ```\n\n   具体请参阅基础教程中的 [创作后台开启，请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)。\n\n5. 运行开发服务器\n\n   ```bash\n   $ python manage.py runserver\n   ```\n\n6. 浏览器访问 http://127.0.0.1:8000/admin，使用第 4 步创建的管理员账户登录后台发布文章，如何发布文章可参考基础教程中的：[创作后台开启，请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)。\n\n   或者执行 fake 脚本批量生成测试数据：\n\n   ```bash\n   $ python -m scripts.fake\n   ```\n\n   \u003e 批量脚本会清除全部已有数据，包括第 4 步创建的后台管理员账户。脚本会再默认生成一个管理员账户，用户名和密码都是 admin。\n\n9. 浏览器访问：http://127.0.0.1:8000，可进入到博客首页\n\n### Pipenv\n\n1. 安装 Pipenv（已安装可跳过）\n\n    ```bash\n    $ pip install pipenv\n    ```\n\n2. 安装项目依赖\n\n    ```bash\n    $ cd HelloDjango-rest-framework-tutorial\n    $ pipenv install --dev\n    ```\n\n    关于如何使用 Pipenv，参阅基础教程中：[开始进入 django 开发之旅](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/59/) 的 Pipenv 创建和管理虚拟环境部分。\n\n3. 迁移数据库\n\n    在项目根目录运行如下命令迁移数据库：\n    ```bash\n    $ pipenv run python manage.py migrate\n    ```\n\n4. 创建后台管理员账户\n\n   在项目根目录运行如下命令创建后台管理员账户\n   \n   ```bash\n   $ pipenv run python manage.py createsuperuser\n   ```\n\n   具体请参阅基础教程中的 [创作后台开启，请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)。\n\n5. 运行开发服务器\n\n   在项目根目录运行如下命令开启开发服务器：\n\n   ```bash\n   $ pipenv run python manage.py runserver\n   ```\n\n6. 浏览器访问 http://127.0.0.1:8000/admin，使用第 4 步创建的管理员账户登录后台发布文章，如何发布文章可参考基础教程中的：[创作后台开启，请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)。\n\n   或者执行 fake 脚本批量生成测试数据：\n\n   ```bash\n   $ pipenv run python -m scripts.fake\n   ```\n\n   \u003e 批量脚本会清除全部已有数据，包括第 4 步创建的后台管理员账户。脚本会再默认生成一个管理员账户，用户名和密码都是 admin。\n\n7. 在浏览器访问：http://127.0.0.1:8000/，可进入到博客首页。\n\n### Docker\n\n1. 安装 Docker 和 Docker Compose\n\n3. 构建和启动容器\n\n   ```bash\n   $ docker-compose -f local.yml build\n   $ docker-compose -f local.yml up\n   ```\n\n4. 创建后台管理员账户\n\n   ```bash\n   $ docker exec -it hellodjango_rest_framework_tutorial_local python manage.py createsuperuser\n   ```\n\n   其中 hellodjango_rest_framework_tutorial_local 为项目预定义容器名。\n\n4. 浏览器访问 http://127.0.0.1:8000/admin，使用第 3 步创建的管理员账户登录后台发布文章，如何发布文章可参考基础教程中的：[创作后台开启，请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)。\n\n   或者执行 fake 脚本批量生成测试数据：\n\n   ```bash\n   $ docker exec -it hellodjango_rest_framework_tutorial_local python -m scripts.fake\n   ```\n\n   \u003e  批量脚本会清除全部已有数据，包括第 3 步创建的后台管理员账户。脚本会再默认生成一个管理员账户，用户名和密码都是 admin。\n\n5. 为 fake 脚本生成的博客文章创建索引，这样就可以使用 Elasticsearch 服务搜索文章\n\n   ```bash\n   $ docker exec -it hellodjango_rest_framework_tutorial_local python manage.py rebuild_index\n   ```\n\n   \u003e 通过 admin 后台添加的文章会自动创建索引。\n\n6. 在浏览器访问：http://127.0.0.1:8000/，可进入到博客首页。\n\n## 线上部署\n\n拼命撰写中...\n\n## 教程目录索引\n\n1. [开篇](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/)\n2. [django-rest-framework 是什么鬼？](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/91/)\n3. [初始化 RESTful API 风格的博客系统](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/92/)\n4. [实现博客首页文章列表 API](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/93/)\n5. [用类视图实现首页 API](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/94/)\n6. [使用视图集简化代码](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/95/)\n7. [分页](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/96/)\n8. [文章详情 API](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/97/)\n9. [在接口返回Markdown解析后的内容](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/98/)\n10. [实现分类、标签、归档日期接口](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/99/)\n11. [评论接口](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/100/)\n12. [基于 drf-haystack 实现文章搜索接口](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/101/)\n13. [加缓存为接口提速](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/102/)\n14. [API 版本管理](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/103/)\n15. [限制接口访问频率](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/104/)\n16. [单元测试](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/105/)\n17. [自动生成接口文档](https://www.zmrenwu.com/courses/django-rest-framework-tutorial/materials/106/)\n\n## 公众号\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/521xueweihan/img/master/hellogithub/logo/weixin.png\" style=\"max-width:70%;\"\u003e\u003cbr\u003e\n欢迎关注 HelloGitHub 公众号，获取更多开源项目的资料和内容。\n\u003c/p\u003e\n\n\n## QQ 群\n\n加入 QQ 群和更多的 django 开发者进行交流：\n\nDjango学习小组主群：696899473\n\n## 版权声明\n\n\u003cimg alt=\"知识共享许可协议\" style=\"border-width: 0\" src=\"https://licensebuttons.net/l/by-nc-nd/4.0/88x31.png\"\u003e\u003c/a\u003e\u003cbr\u003e本作品采用\u003ca rel=\"license\" href=\"https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh\"\u003e署名-非商业性使用-禁止演绎 4.0 国际 \u003c/a\u003e进行许可。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhellogithub-team%2Fhellodjango-rest-framework-tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhellogithub-team%2Fhellodjango-rest-framework-tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhellogithub-team%2Fhellodjango-rest-framework-tutorial/lists"}