@ -30,10 +30,17 @@ class LinkShowType(models.TextChoices):
#fkc 所有模型的基类,包含通用字段,避免重复代码
# 定义缓存时间常量,避免重复使用字面量
CACHE_10_HOURS = 60 * 60 * 10
# 字段名称常量
CREATION_TIME_LABEL = ' creation time '
MODIFY_TIME_LABEL = ' modify time '
CACHE_100_MINUTES = 60 * 100
class BaseModel ( models . Model ) :
id = models . AutoField ( primary_key = True ) #fkc 主键,自动递增
creation_time = models . DateTimeField ( _ ( ' creation time ' ) , default = now ) #fkc 创建时间
last_modify_time = models . DateTimeField ( _ ( ' modify time ' ) , default = now ) #fkc 最后修改时间
creation_time = models . DateTimeField ( _ ( CREATION_TIME_LABEL ) , default = now ) #fkc 创建时间
last_modify_time = models . DateTimeField ( _ ( MODIFY_TIME_LABEL ) , default = now ) #fkc 最后修改时间
#fkc 重写保存方法, 自动处理slug字段( 用于生成友好的URL)
def save ( self , * args , * * kwargs ) :
@ -94,12 +101,12 @@ class Article(BaseModel):
max_length = 1 ,
choices = STATUS_CHOICES ,
default = ' p ' ) #cll 文章状态
comment_status = models . CharField (
comment_status _field = models . CharField (
_ ( ' comment status ' ) ,
max_length = 1 ,
choices = COMMENT_STATUS ,
default = ' o ' ) #cll 评论状态
type = models . CharField ( _ ( ' type ' ) , max_length = 1 , choices = TYPE , default = ' a ' ) #cll 内容类型
article_ type = models . CharField ( _ ( ' type ' ) , max_length = 1 , choices = TYPE , default = ' a ' ) #cll 内容类型
views = models . PositiveIntegerField ( _ ( ' views ' ) , default = 0 ) #cll 浏览次数
author = models . ForeignKey (
settings . AUTH_USER_MODEL ,
@ -134,13 +141,13 @@ class Article(BaseModel):
#cll 获取文章的URL
def get_absolute_url ( self ) :
if self . type == ' a ' :
if self . article_ type == ' a ' :
return reverse ( ' blog:detail ' , kwargs = { ' article_id ' : self . id , ' slug ' : self . slug } )
elif self . type == ' p ' :
elif self . article_ type == ' p ' :
return reverse ( ' blog:page ' , kwargs = { ' article_id ' : self . id , ' slug ' : self . slug } )
#cll 获取分类树, 缓存10小时
@cache_decorator ( 60 * 60 * 10 ) # 缓存10小时
@cache_decorator ( CACHE_10_HOURS ) # 缓存10小时
def get_category_tree ( self ) :
category = self . category
names = [ category . name ]
@ -170,12 +177,12 @@ class Article(BaseModel):
return reverse ( ' admin: %s _ %s _change ' % info , args = ( self . id , ) )
#cll 获取下一篇文章, 缓存100分钟
@cache_decorator ( expiration = 60 * 100 ) # 缓存100分钟
@cache_decorator ( expiration = CACHE_100_MINUTES ) # 缓存100分钟
def next_article ( self ) :
return Article . objects . filter ( id__gt = self . id , status = ' p ' ) . order_by ( ' id ' ) . first ( )
#cll 获取上一篇文章, 缓存100分钟
@cache_decorator ( expiration = 60 * 100 ) # 缓存100分钟
@cache_decorator ( expiration = CACHE_100_MINUTES ) # 缓存100分钟
def prev_article ( self ) :
return Article . objects . filter ( id__lt = self . id , status = ' p ' ) . order_by ( ' -id ' ) . first ( )
@ -215,7 +222,7 @@ class Category(BaseModel):
return self . name
#xy 获取分类树, 缓存10小时
@cache_decorator ( 60 * 60 * 10 ) # 缓存10小时
@cache_decorator ( CACHE_10_HOURS ) # 缓存10小时
def get_category_tree ( self ) :
names = [ self . name ]
category = self . parent_category
@ -225,7 +232,7 @@ class Category(BaseModel):
return names
#xy 获取子分类列表, 缓存10小时
@cache_decorator ( 60 * 60 * 10 ) # 缓存10小时
@cache_decorator ( CACHE_10_HOURS ) # 缓存10小时
def get_sub_categorys ( self ) :
categories = [ ]
all_categories = Category . objects . all ( )
@ -254,7 +261,7 @@ class Tag(BaseModel):
return reverse ( ' blog:tag_detail ' , kwargs = { ' tag_name ' : self . slug } )
#zhj 获取标签下的文章数量, 缓存10小时
@cache_decorator ( 60 * 60 * 10 ) # 缓存10小时
@cache_decorator ( CACHE_10_HOURS ) # 缓存10小时
def get_article_count ( self ) :
return Article . objects . filter ( tags = self ) . count ( )
@ -276,8 +283,8 @@ class Links(models.Model):
max_length = 1 ,
choices = LinkShowType . choices ,
default = LinkShowType . I ) #flj 显示类型
creation_time = models . DateTimeField ( _ ( ' creation time ' ) , default = now ) #flj 创建时间
last_mod _time = models . DateTimeField ( _ ( ' modify time ' ) , default = now ) #flj 修改时间
creation_time = models . DateTimeField ( _ ( CREATION_TIME_LABEL ) , default = now ) #flj 创建时间
last_mod ify _time = models . DateTimeField ( _ ( MODIFY_TIME_LABEL ) , default = now ) #flj 修改时间 ,与基类保持一致
class Meta :
ordering = [ ' sequence ' ] #flj 按序号排序
@ -295,8 +302,8 @@ class SideBar(models.Model):
content = models . TextField ( _ ( ' content ' ) ) #zxm 侧边栏内容( 支持HTML)
sequence = models . IntegerField ( _ ( ' order ' ) , unique = True ) #zxm 排序序号
is_enable = models . BooleanField ( _ ( ' is enable ' ) , default = True ) #zxm 是否启用
creation_time = models . DateTimeField ( _ ( ' creation time ' ) , default = now ) #zxm 创建时间
last_mod_time = models . DateTimeField ( _ ( ' modify time ' ) , default = now ) #zxm 修改时间
creation_time = models . DateTimeField ( _ ( CREATION_TIME_LABEL ) , default = now ) #zxm 创建时间
last_mod_time = models . DateTimeField ( _ ( MODIFY_TIME_LABEL ) , default = now ) #zxm 修改时间
class Meta :
ordering = [ ' sequence ' ] #zxm 按序号排序
@ -338,19 +345,18 @@ class BlogSettings(models.Model):
show_google_adsense = models . BooleanField ( _ ( ' show adsense ' ) , default = False ) #fkc 是否显示广告
google_adsense_codes = models . TextField (
_ ( ' adsense code ' ) , max_length = 2000 , null= True , blank= True , default = ' ' ) #fkc 广告代码
_ ( ' adsense code ' ) , max_length = 2000 , blank= True , default = ' ' ) #fkc 广告代码
open_site_comment = models . BooleanField ( _ ( ' open site comment ' ) , default = True ) #fkc 是否开放评论
comment_need_review = models . BooleanField (
' 评论是否需要审核 ' , default = False , null = False ) #fkc 评论是否需要审核
global_header = models . TextField ( " 公共头部 " , null= True , blank= True , default = ' ' ) #fkc 公共头部HTML
global_footer = models . TextField ( " 公共尾部 " , null= True , blank= True , default = ' ' ) #fkc 公共尾部HTML
global_header = models . TextField ( " 公共头部 " , blank= True , default = ' ' ) #fkc 公共头部HTML
global_footer = models . TextField ( " 公共尾部 " , blank= True , default = ' ' ) #fkc 公共尾部HTML
beian_code = models . CharField (
' 备案号 ' ,
max_length = 2000 ,
null = True ,
blank = True ,
default = ' ' ) #fkc ICP备案号
show_gongan_code = models . BooleanField (
@ -358,7 +364,6 @@ class BlogSettings(models.Model):
gongan_beiancode = models . TextField (
' 公安备案号 ' ,
max_length = 2000 ,
null = True ,
blank = True ,
default = ' ' ) #fkc 公安备案号