github链接 https://github.com/yt-xy/Django-blog
Model模块
./manage.py startapp App名
创建App
blogs/models.py
from django.contrib.auth.models import User
from django.db import models
class Category(models.Model):
STATUS_NORMAL = 1
STATUS_DELETE = 0
STATUS_ITEMS = (
(STATUS_NORMAL, '正常'),
(STATUS_DELETE, '删除'),
)
name = models.CharField(max_length=50, verbose_name='名称')
status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name='状态')
is_nav = models.BooleanField(default=False, verbose_name='是否为导航')
owner = models.ForeignKey(User, verbose_name='作者', on_delete=models.PROTECT, db_constraint=False)
created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
class Meta:
verbose_name = verbose_name_plural = '分类'
class Tag(models.Model):
STATUS_NORMAL = 1
STATUS_DELETE = 0
STATUS_ITEMS = (
(STATUS_NORMAL, '正常'),
(STATUS_DELETE, '删除'),
)
name = models.CharField(max_length=10, verbose_name='名称')
status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name='状态')
owner = models.ForeignKey(User, verbose_name='作者', on_delete=models.PROTECT, db_constraint=False)
created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
class Meta:
verbose_name = verbose_name_plural = '标签'
class Post(models.Model):
STATUS_NORMAL = 1
STATUS_DELETE = 0
STATUS_DRAFT = 2
STATUS_ITEMS = (
(STATUS_NORMAL, '正常'),
(STATUS_DELETE, '删除'),
(STATUS_DRAFT, '草稿'),
)
title = models.CharField(max_length=225, verbose_name='标题')
desc = models.CharField(max_length=1024, blank=True, verbose_name='摘要')
content = models.TextField(verbose_name='正文' ,help_text='正文必须为MarkDown格式')
status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name='状态')
category = models.ForeignKey(Category, verbose_name='分类', on_delete=models.PROTECT, db_constraint=False)
tag = models.ManyToManyField(Tag, verbose_name='标签')
owner = models.ForeignKey(User, verbose_name='作者', on_delete=models.PROTECT, db_constraint=False)
created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
class Meta:
verbose_name = verbose_name_plural = '文章'
ordering = ['-id'] # 根据id进行降序排序
config/models.py
from django.contrib.auth.models import User
from django.db import models
class Link(models.Model):
STATUS_NORMAL = 1
STATUS_DELETE = 0
STATUS_ITEMS = (
(STATUS_NORMAL, '正常'),
(STATUS_DELETE, '删除'),
)
title = models.CharField(max_length=50, verbose_name='标题')
href = models.URLField(verbose_name='链接') # 默认长度为200
status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name='状态')
weight = models.PositiveIntegerField(default=STATUS_NORMAL, choices=zip(range(1, 6), range(1, 6)), verbose_name='权重', help_text='权重高展示顺序靠前')
owner = models.ForeignKey(User, verbose_name='作者', on_delete=models.PROTECT, db_constraint=False)
created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
class Meta:
verbose_name = verbose_name_plural = '友链'
class SideBar(models.Model):
STATUS_SHOW = 1
STATUS_HIDE = 0
STATUS_ITEMS = (
(STATUS_SHOW, '展示'),
(STATUS_HIDE, '隐藏'),
)
SIDE_TYPE = (
(1, 'HTML'),
(2, '最新文章'),
(3, '最热文章'),
(4, '最近评论'),
)
title = models.CharField(max_length=50, verbose_name='标题')
display_type = models.PositiveIntegerField(default=1, choices=SIDE_TYPE, verbose_name='展示类型')
content = models.CharField(max_length=500, blank=True, verbose_name='内容', help_text='如果设置的不是HTML类型,可为空')
status = models.PositiveIntegerField(default=STATUS_SHOW, choices=STATUS_ITEMS, verbose_name='状态')
owner = models.ForeignKey(User, verbose_name='作者', on_delete=models.PROTECT, db_constraint=False)
created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
class Meta:
verbose_name = verbose_name_plural = '侧边栏'
comment/models.py
from django.db import models
from blogs.models import Post
class Comment(models.Model):
STATUS_NORMAL = 1
STATUS_DELETE = 0
STATUS_ITEMS = (
(STATUS_NORMAL, '正常'),
(STATUS_DELETE, '删除'),
)
target = models.ForeignKey(Post, verbose_name='评论目标', on_delete=models.PROTECT, db_constraint=False)
content = models.CharField(max_length=2000, verbose_name='内容')
nickname = models.CharField(max_length=50, verbose_name='昵称')
website = models.URLField(verbose_name='网站')
email = models.EmailField(verbose_name='邮箱')
status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name='状态')
created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
class Meta:
verbose_name = verbose_name_plural = '评论'
settings/base.py中添加app配置
INSTALLED_APPS = [
...,
'blogs',
'config',
'comment',
]
进行数据迁移