{"id":15345700,"url":"https://github.com/enjoy-binbin/django-blog","last_synced_at":"2025-08-15T00:36:08.135Z","repository":{"id":36523801,"uuid":"171880388","full_name":"enjoy-binbin/Django-blog","owner":"enjoy-binbin","description":":yum: A blog system based on python3.6 and Django2.1","archived":false,"fork":false,"pushed_at":"2022-12-08T06:35:27.000Z","size":6510,"stargazers_count":83,"open_issues_count":5,"forks_count":19,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T15:11:44.825Z","etag":null,"topics":["blog","django","django-blog","python","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","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/enjoy-binbin.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}},"created_at":"2019-02-21T13:51:02.000Z","updated_at":"2024-08-20T07:38:15.000Z","dependencies_parsed_at":"2023-01-17T02:30:30.479Z","dependency_job_id":null,"html_url":"https://github.com/enjoy-binbin/Django-blog","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/enjoy-binbin%2FDjango-blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enjoy-binbin%2FDjango-blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enjoy-binbin%2FDjango-blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enjoy-binbin%2FDjango-blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enjoy-binbin","download_url":"https://codeload.github.com/enjoy-binbin/Django-blog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248995101,"owners_count":21195497,"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":["blog","django","django-blog","python","python3"],"created_at":"2024-10-01T11:14:57.002Z","updated_at":"2025-04-15T02:36:51.537Z","avatar_url":"https://github.com/enjoy-binbin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BinBlog\n\n### [Blog演示地址](http://106.52.13.199/), 后续基本迁移到[语雀](https://www.yuque.com/binbintongxuezhu/oxbcl9)了\n\n基于 `python3.6` 和 `Django2.2`的博客系统 \n\n- [English_README](./README_EN.md)\n\n[![license](https://img.shields.io/github/license/enjoy-binbin/Django-blog.svg)](https://github.com/enjoy-binbin/Django-blog/blob/master/LICENSE) [![Build Status](https://travis-ci.com/enjoy-binbin/Django-blog.svg?branch=master)](https://travis-ci.org/enjoy-binbin/Django-blog) [![codecov](https://codecov.io/gh/enjoy-binbin/Django-blog/branch/master/graph/badge.svg)](https://codecov.io/gh/enjoy-binbin/Django-blog) [![Coverage Status](https://coveralls.io/repos/github/enjoy-binbin/Django-blog/badge.svg?branch=master)](https://coveralls.io/github/enjoy-binbin/Django-blog?branch=master) [![Requirements Status](https://requires.io/github/enjoy-binbin/Django-blog/requirements.svg?branch=master)](https://requires.io/github/enjoy-binbin/Django-blog/requirements/?branch=master)\n\n### 其他说明：\n\n0. 博客部署请参考`docker-compose.yml`文件说明, 原`docker`目录下的说明已经过时, 如需联系可以直接email我\n1. 以前第一版django-blog。基于Django1.9的\u003ca href=\"https://github.com/enjoy-binbin/pyblog\"\u003epyblog\u003c/a\u003e，前端自己设计的/捂脸。不维护了的\n2. 对于使用Docker部署，可以看docker目录下的文件或者看\u003ca href=\"https://github.com/enjoy-binbin/docker-django-blog\"\u003eDocker-djangoblog\u003c/a\u003e仓库。\n3. 抛弃亚马逊云部署了，使用github page纯静态页面部署，本地开发一键生成HTML文件并进行github push. (演示图看最下，站点看首页)\n\n### 本地开发环境\n\n1. win10 64位\n2. 后端技术栈：Python3.6、Django2.2、Djangorestframework 3.9、Celery4\n3. 数据库：持久化Mysql，缓存Memcache，消息队列Redis\n4. 前端技术栈：Jquery、Bootstrap\n5. 开发工具：PyCharm 2018.1\n6. admin后台： `fake_admin fake_admin`\n7. 线上环境： AWS ，Ubuntu18.04，Nginx+(gunicorn or uwsgi)，Mysql5.7，Python3.6(站点已停)\n8. 线上代码不同步的，一直在本地开发鼓捣\n\n## 主要功能\n\n* 二次开发的admin后台管理系统，轻松进行站点配置\n* 文章分类，文章，文章标签，相册图片的增删改查，展示，文章搜索\n* 文章编辑支持 `Markdown ` ， 文章详情支持`Markdown`，支持代码高亮\n* 支持文章列表分页（写入缓存），文章评论留言\n* 用户注册登陆（可选邮箱验证），支持github oauth登陆\n* 右侧侧边栏功能，最热文章，最新文章，标签云\n* 文章根据添加时间进行归档\n* 使用Djangorestframework对博客进行API开发（在blog/api目录下）\n* 使用logging记录错误日志，使用celery+redis进行一些异步任务的调度\n* 增加伪多用户博客系统，用户注册可以拥有对自己文章的增删改查操作，可以写文章\n* 相册功能，有两种样式，不喜欢的可以在admin设置里关闭，或者选其一，在base/nav.html里修改\n* 根据文章内容分类，使用模板生成简单的HTML文件，并且推送到github page托管\n\n## 使用到\n\n* djangorestframework和 restframework-jwt进行API学习开发\n* django通用视图，ListViewDetailView，FromView，RedirectView\n* admin的扩展，ModelAdmin扩展，SimpleListFilter自定义过滤器，二次开发\n* 自定义LoginView，RegisterView，LogoutView，部分django自带auth用法\n* context_processors自定义模板全局变量\n* 侧边栏编辑页 TextFields使用 `pagedown` 支持 `markdown`\n* 文章内容使用 `mdeditor`支持`markdown`和`图片上传`\n* templatetags 自定义模板标签 tags，支持markdown，代码高亮\n* 使用haystack和whoosh实现的全文文章搜索功能\n* slug的用法\n* 使用django-compress压缩css/js\n* django简单中间件的编写，显示页面加载时间\n* 使用django的sitemap功能\n* python-memcached对网站的部分信息缓存\n* 自定义django.manage命令,create_fake_data，生成测试数据，clear_migrations清理迁移文件\n* django中使用logging模块、message模块\n* 使用celery+redis进行异步的邮件发送\n\n\n## 安装\n\n1. 安装依赖（最好新建个虚拟环境），两种方式都可以，前者豆瓣源好记住，后者阿里源包更齐全的感觉\n   * pip install -Ur requirements -i https://pypi.douban.com/simple\n   * pip install -i https://mirrors.aliyun.com/pypi/simple -r requirements.txt\n2. 配置设置将settings.py.example改成 settings.py\n  * 自行修改 `binblog/settings.py` 里的数据库配置:\n\n     ```\n     DATABASES = {\n         'default': {\n             'ENGINE': 'django.db.backends.mysql',\n             'NAME': 'blog',  # 数据库名称, 需要自己手动创建, 编码指定为utf8\n            \t# create database blog default character set utf8 collate utf8_general_ci;\n             'USER': 'root',  # 数据库账号\n             'PASSWORD': '123456',  # 数据库密码\n             'PORT': 3306,  # 数据库端口, 默认为3306\n             'HOST': '127.0.0.1',  # 数据库地址\n             'TEST': {\n                 'NAME': 'test_db',  # 测试数据库名称\n                 'CHARSET': 'utf8',  # 测试数据库编码\n                 'COLLATION': 'utf8_general_ci'\n             }\n         }\n     }\n     ```\n\n  * 创建数据库 `create database binblog;`\n\n  * 在终端下进行数据迁移:\n\n       ```\n           ./manage.py makemigrations\n           ./manage.py migrate\n       ```\n\n  * 创建测试数据 `./manage.py create_fake_data`\n\n  * 根据需要使用Navicat导入目录下的 sql文件\n      `./ manage.py createsuperuser`\n\n  * 运行 `./manage.py runserver 8000`\n\n  * 浏览器打开 `127.0.0.1:8000`\n3. 配置项（更多设置看settings和blog.model.Setting模型）\n\n### 持续学习，源码中有大量注释，适合有Django基础的童鞋~\n\n### 感谢观看和star，欢迎提issue\n\n#### 部分演示图，没同步到线上环境的\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display.png)\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display2.png)\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display3.png)\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display4.png)\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display5.png)\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display6.png)\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display7.png)\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display8.png)\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display9.png)\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display10.png)\n\n![display](https://raw.githubusercontent.com/enjoy-binbin/Django-blog/master/media/display/display11.png)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenjoy-binbin%2Fdjango-blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenjoy-binbin%2Fdjango-blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenjoy-binbin%2Fdjango-blog/lists"}