{"id":51006749,"url":"https://github.com/o8oo8o/blog","last_synced_at":"2026-06-20T21:01:29.807Z","repository":{"id":239393981,"uuid":"365657348","full_name":"o8oo8o/blog","owner":"o8oo8o","description":"个人网盘及文档管理项目","archived":false,"fork":false,"pushed_at":"2021-05-09T04:34:38.000Z","size":5838,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-05-12T04:33:27.642Z","etag":null,"topics":["blog","netdisk","tornado","vue"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/o8oo8o.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}},"created_at":"2021-05-09T03:17:05.000Z","updated_at":"2024-05-12T04:33:28.957Z","dependencies_parsed_at":"2024-05-12T04:43:34.447Z","dependency_job_id":null,"html_url":"https://github.com/o8oo8o/blog","commit_stats":null,"previous_names":["o8oo8o/blog"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/o8oo8o/blog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o8oo8o%2Fblog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o8oo8o%2Fblog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o8oo8o%2Fblog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o8oo8o%2Fblog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/o8oo8o","download_url":"https://codeload.github.com/o8oo8o/blog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o8oo8o%2Fblog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34585195,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["blog","netdisk","tornado","vue"],"created_at":"2026-06-20T21:01:28.700Z","updated_at":"2026-06-20T21:01:29.801Z","avatar_url":"https://github.com/o8oo8o.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 个人网盘及文档管理项目\n# [在线demo](https://www.huangrui.vip:1234/)\n\n### 因多次注册某博客未果，决定自己开发，主要功能如下：\n\n#### 前台功能：\n- 个人资料\n- 在线聊天\n- 在线音乐\n- 博客查看、搜索、评论、阅读及评论统计\n- 简历查看功能\n\n#### 后台功能：\n- 仪表板,主要指标图标展示\n- 在线聊天\n- 在线音乐\n- 博客分类增删改查\n- 博客增删改查询\n- 评论增删改查\n- 简历增删改查\n- 简历发布\n- 简历阅读统计及邮件提醒\n- 网盘,目录树\n- 主机性能健康\n- 主机SSH远程管理\n- 动态前后台补丁\n\n### 主要使用如下技术栈：\n\n#### 后端：\nPython 3.8 + tornado 6.0.3\n\n#### 前端：\nJavaScript + VUE 2.6.10 + chart\n\n#### 数据库：\nMySQL + Redis\n\n---\n### backend 后端代码实现\n\n### frontend 前端代码实现\n\n### install.txt 是部署参考说明\n\n---\n### 演示截图\n![avatar](./img/a.png)\n![avatar](./img/b.png)\n![avatar](./img/c.png)\n![avatar](./img/d.png)\n![avatar](./img/e.png)\n![avatar](./img/f.png)\n![avatar](./img/g.png)\n![avatar](./img/h.png)\n![avatar](./img/i.png)\n\n---\n完整目录结构如下：\n```\n.\n|-- README.md\n|-- backend   # 后端Python实现\n|   |-- README.md\n|   `-- blog\n|       |-- conf\n|       |   |-- __init__.py\n|       |   |-- conf.py                     # 生产环境配置文件\n|       |   `-- dev_conf.py                 # 开发环境配置文件\n|       |-- dao\n|       |   |-- __init__.py\n|       |   |-- accesslog.py\n|       |   |-- base.py\n|       |   |-- blog.py\n|       |   |-- chat.py\n|       |   |-- classify.py\n|       |   |-- loginlog.py\n|       |   |-- publish.py\n|       |   |-- resume.py\n|       |   |-- review.py\n|       |   `-- setting.py\n|       |-- dbinit.py\n|       |-- handler\n|       |   |-- __init__.py\n|       |   |-- admin                      # 后台管理API功能实现\n|       |   |   |-- __init__.py\n|       |   |   |-- base.py\n|       |   |   |-- blog.py\n|       |   |   |-- classify.py\n|       |   |   |-- dashboard.py\n|       |   |   |-- login.py\n|       |   |   |-- monitor.py\n|       |   |   |-- netdisk.py\n|       |   |   |-- publish.py\n|       |   |   |-- resume.py\n|       |   |   |-- review.py\n|       |   |   |-- setting.py\n|       |   |   |-- ssh.py\n|       |   |   `-- upload.py\n|       |   |-- base.py\n|       |   `-- open                        # 前台开放API功能实现\n|       |       |-- __init__.py\n|       |       |-- base.py\n|       |       |-- blog.py\n|       |       |-- chat.py\n|       |       |-- error.py\n|       |       |-- home.py\n|       |       |-- music.py\n|       |       |-- publish.py\n|       |       |-- review.py\n|       |       |-- verifycode.py\n|       |       `-- xsrf.py\n|       |-- main.py\n|       |-- model\n|       |   |-- __init__.py\n|       |   |-- base.py\n|       |   |-- dbinit.py\n|       |   `-- model.py\n|       |-- service\n|       |   |-- __init__.py\n|       |   |-- accesslog.py\n|       |   |-- base.py\n|       |   |-- blog.py\n|       |   |-- chat.py\n|       |   |-- classify.py\n|       |   |-- dashboard.py\n|       |   |-- home.py\n|       |   |-- login.py\n|       |   |-- loginlog.py\n|       |   |-- netdisk.py\n|       |   |-- publish.py\n|       |   |-- resume.py\n|       |   |-- review.py\n|       |   |-- setting.py\n|       |   `-- ssh.py\n|       |-- url.py\n|       `-- util\n|           |-- __init__.py\n|           |-- acl.py\n|           |-- actuator.py\n|           |-- blogenum.py\n|           |-- config.py\n|           |-- exception.py\n|           |-- font.ttf\n|           |-- guard.py\n|           |-- logger.py\n|           |-- mail.py\n|           |-- monitor.py\n|           |-- session.py\n|           |-- test.py\n|           `-- verifycode.py\n|-- frontend                            # 前端功能\n|   |-- admin                           # 前端后台管理功能\n|   |   |-- README.md\n|   |   |-- babel.config.js\n|   |   |-- package-lock.json\n|   |   |-- package.json\n|   |   |-- public\n|   |   |   |-- favicon.ico\n|   |   |   |-- img\n|   |   |   |   |-- chat\n|   |   |   |   |   |-- admin.png\n|   |   |   |   |   |-- g0.ico\n|   |   |   |   |   |-- g1.ico\n|   |   |   |   |   |-- g10.ico\n|   |   |   |   |   |-- g11.ico\n|   |   |   |   |   |-- g12.ico\n|   |   |   |   |   |-- g13.ico\n|   |   |   |   |   |-- g14.ico\n|   |   |   |   |   |-- g15.ico\n|   |   |   |   |   |-- g16.ico\n|   |   |   |   |   |-- g17.ico\n|   |   |   |   |   |-- g2.ico\n|   |   |   |   |   |-- g3.ico\n|   |   |   |   |   |-- g4.ico\n|   |   |   |   |   |-- g5.ico\n|   |   |   |   |   |-- g6.ico\n|   |   |   |   |   |-- g7.ico\n|   |   |   |   |   |-- g8.ico\n|   |   |   |   |   `-- g9.ico\n|   |   |   |   |-- logo.png\n|   |   |   |   `-- user.png\n|   |   |   |-- index.html\n|   |   |   `-- plugins\n|   |   |       |-- adminlte\n|   |   |       |   |-- css\n|   |   |       |   |   |-- adminlte.min.css\n|   |   |       |   |   `-- adminlte.min.css.map\n|   |   |       |   `-- js\n|   |   |       |       |-- adminlte.min.js\n|   |   |       |       `-- adminlte.min.js.map\n|   |   |       |-- bootstrap\n|   |   |       |   `-- js\n|   |   |       |       |-- bootstrap.bundle.min.js\n|   |   |       |       `-- bootstrap.bundle.min.js.map\n|   |   |       |-- chart\n|   |   |       |   `-- js\n|   |   |       |       |-- chart.min.css\n|   |   |       |       `-- chart.min.js\n|   |   |       |-- editer\n|   |   |       |   `-- js\n|   |   |       |       `-- editor.js\n|   |   |       |-- fontawesome\n|   |   |       |   |-- css\n|   |   |       |   |   `-- all.min.css\n|   |   |       |   `-- webfonts\n|   |   |       |       |-- fa-brands-400.eot\n|   |   |       |       |-- fa-brands-400.svg\n|   |   |       |       |-- fa-brands-400.ttf\n|   |   |       |       |-- fa-brands-400.woff\n|   |   |       |       |-- fa-brands-400.woff2\n|   |   |       |       |-- fa-regular-400.eot\n|   |   |       |       |-- fa-regular-400.svg\n|   |   |       |       |-- fa-regular-400.ttf\n|   |   |       |       |-- fa-regular-400.woff\n|   |   |       |       |-- fa-regular-400.woff2\n|   |   |       |       |-- fa-solid-900.eot\n|   |   |       |       |-- fa-solid-900.svg\n|   |   |       |       |-- fa-solid-900.ttf\n|   |   |       |       |-- fa-solid-900.woff\n|   |   |       |       `-- fa-solid-900.woff2\n|   |   |       `-- jquery\n|   |   |           |-- jquery.min.js\n|   |   |           `-- jquery.min.map\n|   |   |-- src\n|   |   |   |-- App.vue\n|   |   |   |-- assets\n|   |   |   |   `-- logo.png\n|   |   |   |-- components\n|   |   |   |   |-- Chat.vue\n|   |   |   |   `-- Music.vue\n|   |   |   |-- main.js\n|   |   |   |-- router.js\n|   |   |   |-- store.js\n|   |   |   `-- views\n|   |   |       |-- Home.vue\n|   |   |       |-- Login.vue\n|   |   |       `-- admin\n|   |   |           |-- Blog.vue\n|   |   |           |-- Classify.vue\n|   |   |           |-- Dashboard.vue\n|   |   |           |-- Monitor.vue\n|   |   |           |-- Netdisk.vue\n|   |   |           |-- Publish.vue\n|   |   |           |-- Remote.vue\n|   |   |           |-- Resume.vue\n|   |   |           |-- Review.vue\n|   |   |           `-- Setting.vue\n|   |   `-- vue.config.js\n|   `-- blog                            # 前端博客功能\n|       |-- README.md\n|       |-- babel.config.js\n|       |-- package-lock.json\n|       |-- package.json\n|       |-- public\n|       |   |-- favicon.ico\n|       |   |-- img\n|       |   |   |-- chat\n|       |   |   |   |-- admin.png\n|       |   |   |   |-- g0.ico\n|       |   |   |   |-- g1.ico\n|       |   |   |   |-- g10.ico\n|       |   |   |   |-- g11.ico\n|       |   |   |   |-- g12.ico\n|       |   |   |   |-- g13.ico\n|       |   |   |   |-- g14.ico\n|       |   |   |   |-- g15.ico\n|       |   |   |   |-- g16.ico\n|       |   |   |   |-- g17.ico\n|       |   |   |   |-- g2.ico\n|       |   |   |   |-- g3.ico\n|       |   |   |   |-- g4.ico\n|       |   |   |   |-- g5.ico\n|       |   |   |   |-- g6.ico\n|       |   |   |   |-- g7.ico\n|       |   |   |   |-- g8.ico\n|       |   |   |   `-- g9.ico\n|       |   |   |-- logo.png\n|       |   |   `-- user.png\n|       |   |-- index.html\n|       |   `-- plugins\n|       |       |-- adminlte\n|       |       |   |-- css\n|       |       |   |   |-- adminlte.min.css\n|       |       |   |   `-- adminlte.min.css.map\n|       |       |   `-- js\n|       |       |       |-- adminlte.min.js\n|       |       |       `-- adminlte.min.js.map\n|       |       |-- bootstrap\n|       |       |   `-- js\n|       |       |       |-- bootstrap.bundle.min.js\n|       |       |       `-- bootstrap.bundle.min.js.map\n|       |       |-- chart\n|       |       |   `-- js\n|       |       |       |-- chart.min.css\n|       |       |       `-- chart.min.js\n|       |       |-- editer\n|       |       |   `-- js\n|       |       |       `-- editor.js\n|       |       |-- fontawesome\n|       |       |   |-- css\n|       |       |   |   `-- all.min.css\n|       |       |   `-- webfonts\n|       |       |       |-- fa-brands-400.eot\n|       |       |       |-- fa-brands-400.svg\n|       |       |       |-- fa-brands-400.ttf\n|       |       |       |-- fa-brands-400.woff\n|       |       |       |-- fa-brands-400.woff2\n|       |       |       |-- fa-regular-400.eot\n|       |       |       |-- fa-regular-400.svg\n|       |       |       |-- fa-regular-400.ttf\n|       |       |       |-- fa-regular-400.woff\n|       |       |       |-- fa-regular-400.woff2\n|       |       |       |-- fa-solid-900.eot\n|       |       |       |-- fa-solid-900.svg\n|       |       |       |-- fa-solid-900.ttf\n|       |       |       |-- fa-solid-900.woff\n|       |       |       `-- fa-solid-900.woff2\n|       |       `-- jquery\n|       |           |-- jquery.min.js\n|       |           `-- jquery.min.map\n|       |-- src\n|       |   |-- App.vue\n|       |   |-- assets\n|       |   |   `-- logo.png\n|       |   |-- components\n|       |   |   |-- Banner.vue\n|       |   |   |-- Chat.vue\n|       |   |   `-- Music.vue\n|       |   |-- main.js\n|       |   |-- router.js\n|       |   |-- store.js\n|       |   `-- views\n|       |       |-- BlogList.vue\n|       |       |-- BlogShow.vue\n|       |       |-- Home.vue\n|       |       `-- Resume.vue\n|       `-- vue.config.js\n`-- init.sh\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fo8oo8o%2Fblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fo8oo8o%2Fblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fo8oo8o%2Fblog/lists"}