仿CSDN博客网站结构,制作博客系统。实现文章展示、文章管理、文章在线编辑。
点击访问网站;主要功能已完成,一些细节还需完善
网站前端使用jQuery+amaze ui完成
后端使用Django+uwsgi+nginx完成
底层使用MySQL+Redis+FastDFS+Celery完成
特别感谢amaze ui和editor.md的开源!
# 新建虚拟环境
# -p后指定python命令所在路径(若使用系统已安装的环境建立虚拟环境可直接输入相应版本的命令,如python3.5)
# 最后指定一个虚拟环境名字,最好见名知意
mkvirtualenv -p python3 django1.8.2-py3
# 启用虚拟环境
workon django1.8.2-py3
# 退出虚拟环境
deactivate
# 启用虚拟环境
workon django1.8.2-py3
# 安装django1.8.2
pip django==1.8.2
# 新建文件夹
mkdir ./django_blog
# 建立dj_blog项目在django_blog文件夹下
django-admin startproject dj_blog ./django_blog
# 确认是否处于虚拟环境下
# 进入项目目录
cd django_blog
# 新建apps文件夹及四个应用所在文件夹
mkdir ./apps
mkdir ./apps/blog_index ./apps/blog_article ./apps/blog_console ./apps/blog_sign
# 在apps文件夹中建立四个应用
python manage.py startapp blog_index ./apps/blog_index
python manage.py startapp blog_article ./apps/blog_article
python manage.py startapp blog_console ./apps/blog_console
python manage.py startapp blog_sign ./apps/blog_sign
dj_blog/settings.py
# settings.py中修改的内容
INSTALLED_APPS = (
...
# 添加apps
'apps.blog_index',
'apps.blog_article',
'apps.blog_console',
'apps.blog_sign',
)
...
LANGUAGE_CODE = 'zh-hans' # 使用中文
TIME_ZONE = 'Asia/Shanghai' # 设定时区
用户 | 用户详情 | markdown文章 | html文章 | 图片 |
---|---|---|---|---|
ID | 用户ID | 用户ID | 用户ID | 用户ID |
邮箱 | 昵称 | 标题 | 标题 | 标题 |
密码 | 内容 | 内容 | 内容 | |
是否激活 | 微信 | 文章ID | 文章ID | 文章ID |
微博 | 是否展示 | |||
GitHub | 是否为头像 | |||
自我介绍 |
# 回到项目根目录
# 新建db_model文件夹
mkdir ./db_model
cd ./db_model
# 新建__init__.py文件和base_model.py
touch __init__.py base_model.py
# base_model.py文件内容
from django.db import models
class BaseModel(models.Model):
"""
定义抽象模型类
"""
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
is_delete = models.BooleanField(default=False, verbose_name='删除标记')
class Meta:
abstract = True # 是否为抽象模型类
编写User(用户)、UserInfo(用户详情)模型类
User模型类继承Django提供的用户模型类AbstractUser
# apps/blog_sign/models.py内容
from django.db import models
from db_model.base_model import BaseModel
from django.contrib.auth.models import AbstractUser
# Create your models here.
# 使用Django提供的用户模型
class User(AbstractUser, BaseModel):
def __str__(self):
return self.username
class Meta:
db_table = 'blog_user'
verbose_name = '用户列表'
verbose_name_plural = verbose_name
class UserInfo(BaseModel):
user = models.OneToOneField(User, verbose_name='用户名', on_delete=models.CASCADE)
qq_id = models.CharField(max_length=15, null=True, blank=True, verbose_name='QQ账号')
wechat_id = models.CharField(max_length=50, null=True, blank=True, verbose_name='微信账号')
github_id = models.CharField(max_length=50, null=True, blank=True, verbose_name='GitHub账号')
weibo_id = models.CharField(max_length=50, null=True, blank=True, verbose_name='微博账号')
introduction = models.CharField(max_length=250, null=True, blank=True, verbose_name='个人简介')
name = models.CharField(max_length=30, null=True, blank=True, verbose_name='昵称')
def __str__(self):
return self.name
class Meta:
db_table = 'blog_userinfo'
verbose_name = '用户信息'
verbose_name_plural = verbose_name
# dj_blog/settings.py添加配置
# 自定义User模型类设置
# 继承重写User模型类时,指定自定义的模型类,'app名字.类名'
AUTH_USER_MODEL = 'blog_sign.User'
# apps/blog_console/models.py内容
from django.db import models
from db_model.base_model import BaseModel
from apps.blog_sign.models import User
# Create your models here.
class BlogMarkdown(BaseModel):
user = models.ForeignKey(User, verbose_name='作者', on_delete=models.CASCADE)
title = models.CharField(max_length=30, verbose_name='标题')
article = models.TextField(verbose_name='文章')
def __str__(self):
s = self.title
return s
class Meta:
db_table = 'blog_markdown'
verbose_name = 'Markdown列表'
verbose_name_plural = verbose_name
class BlogHtml(BaseModel):
user = models.ForeignKey(User, verbose_name='作者', on_delete=models.CASCADE)
title = models.CharField(max_length=30, verbose_name='标题')
article = models.TextField(verbose_name='文章')
markdown = models.OneToOneField(BlogMarkdown, verbose_name='markdown文章ID', on_delete=models.CASCADE)
is_show = models.BooleanField(default=True, verbose_name='是否发布')
def __str__(self):
s = '【' + str(self.user_id) + '】' + self.title
return s
class Meta:
db_table = 'blog_html'
verbose_name = 'Html列表'
verbose_name_plural = verbose_name
class BlogImage(BaseModel):
user = models.ForeignKey(User, verbose_name='作者', on_delete=models.CASCADE)
article = models.ForeignKey(BlogMarkdown, null=True, blank=True, verbose_name='所属文章', on_delete=models.CASCADE)
title = models.CharField(max_length=30, null=True, blank=True, verbose_name='标题')
image = models.ImageField(upload_to='image', verbose_name='图片')
is_head = models.BooleanField(default=False, verbose_name='是否为头像')
is_show = models.BooleanField(default=False, verbose_name='是否展示')
def __str__(self):
return self.title
class Meta:
db_table = 'blog_image'
verbose_name = '图片列表'
verbose_name_plural = verbose_name
目前使用的数据库是Django默认的sqlite数据库,项目目录中的db.sqlite3就是数据库文件
项目新建阶段暂时使用sqlite数据库,后期会改为mysql数据库
# 终端进入项目根目录
# 确认处于虚拟环境
# 生成迁移文件
python manage.py makemigrations
# 根据迁移文件修改数据库
python manage.py migrate
项目建立和模型设计完成
https://download.csdn.net/download/u010139869/10392306