数据库配置:

#sqlite3数据库配置:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
} #mysql 数据库配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'book_manage', #你的数据库名称 'USER': 'root', #你的数据库用户名 'PASSWORD': '', #你的数据库密码 'HOST': '', #你的数据库主机,留空默认为localhost 'PORT': '', #你的数据库端口 } }

博客系统数据表结构设计:

from django.db import models
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser):
"""
用户信息
"""
nid = models.BigAutoField(primary_key=True)
nickname = models.CharField(verbose_name='昵称', max_length=32)
telephone = models.CharField(max_length=11, blank=True, null=True, unique=True, verbose_name='手机号码')
#blank=Ture 设置Django自带到user表里该字段可为空,null=True是Userinfo表里该字段为空,因为继承里User表,必须两者都设置,该字段才可以为空
avatar = models.FileField(verbose_name='头像', upload_to='./upload/avatar/') #upload_to 设置上传文件的路径(如果设置了media,则传到media文件下,如果没有,则放在根目录下)
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) #自动添加该字段 fans = models.ManyToManyField(verbose_name='粉丝们',
to='UserInfo', #设置多对多关联表
through='UserFans', #指定关联的第三张表(自己创建),如果不指定,会自动创建第三张关系表,但是查询数据时不能使用该表,谷自己创建,
through_fields=('user', 'follower')) #关联的字段
def __str__(self):
return self.username class UserFans(models.Model):
"""
互粉关系表
"""
nid = models.AutoField(primary_key=True)
user = models.ForeignKey(verbose_name='博主', to='UserInfo', to_field='nid', related_name='users')
follower = models.ForeignKey(verbose_name='粉丝', to='UserInfo', to_field='nid', related_name='followers') class Meta:
unique_together = [
('user', 'follower'), #联合主键
] class Blog(models.Model):
"""
博客信息
"""
nid = models.BigAutoField(primary_key=True)
title = models.CharField(verbose_name='个人博客标题', max_length=64)
site = models.CharField(verbose_name='个人博客后缀', max_length=32, unique=True)
theme = models.CharField(verbose_name='博客主题', max_length=32)
user = models.OneToOneField(to='UserInfo', to_field='nid') #建立一对一的关系 def __str__(self):
return self.title class Category(models.Model):
"""
博主个人文章分类表
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='分类标题', max_length=32)
blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid') def __str__(self):
return self.title class Article(models.Model):
nid = models.BigAutoField(primary_key=True)
title = models.CharField(max_length=50, verbose_name='文章标题')
desc = models.CharField(max_length=255, verbose_name='文章描述')
read_count = models.IntegerField(default=0)
comment_count = models.IntegerField(default=0)
up_count = models.IntegerField(default=0)
down_count = models.IntegerField(default=0)
category = models.ForeignKey(verbose_name='文章类型', to='Category', to_field='nid', null=True)
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid')
tags = models.ManyToManyField(
to="Tag",
through='Article2Tag',
through_fields=('article', 'tag'),
) type_choices = [
(1, "Python"),
(2, "Linux"),
(3, "OpenStack"),
(4, "GoLang"),
] article_type_id = models.IntegerField(choices=type_choices, default=None) def __str__(self):
return self.title #
class ArticleDetail(models.Model):
"""
文章详细表
"""
nid = models.AutoField(primary_key=True)
content = models.TextField(verbose_name='文章内容', )
article = models.OneToOneField(verbose_name='所属文章', to='Article', to_field='nid') class Comment(models.Model):
"""
评论表
"""
nid = models.BigAutoField(primary_key=True)
article = models.ForeignKey(verbose_name='评论文章', to='Article', to_field='nid')
content = models.CharField(verbose_name='评论内容', max_length=255)
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
parent_id = models.ForeignKey('self', blank=True, null=True, verbose_name='父级评论')
user = models.ForeignKey(verbose_name='评论者', to='UserInfo', to_field='nid')
up_count = models.IntegerField(default=0) def __str__(self):
return self.content class ArticleUpDown(models.Model):
"""
点赞表
"""
nid = models.AutoField(primary_key=True)
user = models.ForeignKey('UserInfo', null=True)
article = models.ForeignKey("Article", null=True)
models.BooleanField(verbose_name='是否赞') class CommentUp(models.Model):
"""
点赞表
"""
nid = models.AutoField(primary_key=True)
user = models.ForeignKey('UserInfo', null=True)
comment = models.ForeignKey("Comment", null=True) class Tag(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='标签名称', max_length=32)
blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid') def __str__(self):
return self.title class Article2Tag(models.Model):
nid = models.AutoField(primary_key=True)
article = models.ForeignKey(verbose_name='文章', to="Article", to_field='nid')
tag = models.ForeignKey(verbose_name='标签', to="Tag", to_field='nid') class Meta:
unique_together = [
('article', 'tag'),
]

最新文章

  1. [DeviceOne开发]-手势动画示例分享
  2. Sql服务定时重启
  3. java 面向对象编程 --第十二章 JDK常用类
  4. springmvc学习笔记---idea创建springmvc项目
  5. 在vim中设置将tab自动转化为4个空格
  6. CSS学习笔记——定位position属性的学习
  7. C++开发与Windows API
  8. SqLite 使用 Dapper 查询INTEGER类型的主键问题
  9. C#泛型委托及约束
  10. HTTP权威指南-HTTP报文
  11. selenium2之文件上传
  12. Redis 数据结构与内存管理策略(上)
  13. Java类的继承与方法调用的一个小问题
  14. java8 学习记录
  15. .net core日志记录
  16. ubuntu 换源过程中遇到的坑(一):Could not resolve 'mirrors.aliyun.com'
  17. Thinkphp3.2+PHPQRCode 二维码生成示例
  18. python_03 各种运算符
  19. php 7.2 安装 mcrypt 扩展: mcrypt 扩展从 php 7.1.0 开始废弃;自 php 7.2.0 起,会移到 pecl
  20. rabbitmq /usr/lib/rabbitmq/bin/rabbitmq-server: line 85: erl: command not found

热门文章

  1. consul eureka区别(来自Consul官网)
  2. tinycore Network card configuration during exec bootlocal.sh
  3. JS常用的方法总结
  4. js instanceof (2)
  5. package-cleanup用法
  6. GUN C中的流
  7. Android无线测试之—UiAutomator UiSelector API介绍之七
  8. 复制对象(一)copy和mutableCopy方法
  9. js引入方式的弹框方法2
  10. Storm 提交任务过程详解 (不对地方麻烦指正)