BBS模型层搭建

2024-03-14 15:52
文章标签 模型 搭建 bbs

本文主要是介绍BBS模型层搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BBS模型层搭建

目录

  • BBS模型层搭建
    • 建表思想
    • 配置文件
    • 模型层
      • User应用:
      • Blog应用:
      • Article应用:

建表思想

表结构图解

配置文件

settings.py

# 默认用户模型指定
AUTH_USER_MODEL = 'User.Userinfo'

底部添加即可,用于替换默认的AbstractUser用户表


STATIC_URL = '/static/'
STATIC_DIRS = [os.path.join(BASE_DIR, 'User/static')
]

创建static静态地址


DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'BBS','USER': 'root','PASSWORD': '7997','HOST': '127.0.0.1','PORT': 3306,'CHARSET': 'utf8',}
}

更改默认数据库


模型层

User应用:

# models.pyfrom django.db import models
from django.contrib.auth.models import AbstractUser# 用户表
class Userinfo(AbstractUser):phone = models.CharField(verbose_name='手机号', help_text='手机号', max_length=11, null=True)avatar = models.FileField(verbose_name='头像', help_text='头像', null=True, default='static/avatar/default.png')register_time = models.TimeField(verbose_name='注册时间', help_text='注册时间', auto_now_add=True)last_login_time = models.TimeField(verbose_name='最近登录时间', help_text='最近登录时间', null=True)is_deleted = models.BooleanField(verbose_name='注销状态', help_text='注销状态', default=False)# 一对一绑定站点表blog = models.OneToOneField('Blog.Blog', verbose_name='关联站点', help_text='关联站点',on_delete=models.CASCADE,related_name='blog', null=True)class Meta:# 指定数据库在后台显示的名字verbose_name = "用户表"verbose_name_plural = verbose_namedb_table = 'Userinfo'
# admin.pyfrom django.contrib import admin
from User.models import Userinfo# Register your models here.# 创建一个类并用它来定制Userinfo
@admin.register(Userinfo)
# 这个类必须继承 admin.ModelAdmin
class UserinfoAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['username', 'last_name', 'email', 'phone', 'avatar', 'register_time', 'last_login_time','is_deleted', 'blog']

Blog应用:

# models.py
from django.db import models# 个人站点表
class Blog(models.Model):site_name = models.CharField(verbose_name='站点名', help_text='站点名', max_length=20, null=True)site_title = models.CharField(verbose_name='站点标题', help_text='站点标题', max_length=20, null=True)site_theme = models.CharField(verbose_name='站点样式', help_text='站点样式', max_length=255, null=True)# 一对多绑定分类表article_category = models.ForeignKey('Article.ArticleCategory', verbose_name='关联分类', help_text='关联分类',on_delete=models.CASCADE, related_name='blog')# 一对多绑定标签表article_tags = models.ForeignKey('Article.ArticleTags', verbose_name='关联标签', help_text='关联标签',on_delete=models.CASCADE, related_name='blog')class Meta:# 指定数据库在后台显示的名字verbose_name = "个人站点表"verbose_name_plural = verbose_namedb_table = 'Blog'# 广告信息表
class Adv(models.Model):title = models.CharField(verbose_name="广告标题", help_text="广告标题", max_length=64)content = models.TextField(verbose_name="广告详情", help_text="广告详情")create_time = models.DateTimeField(verbose_name="创建时间", help_text="创建时间", auto_now=True)update_time = models.DateTimeField(verbose_name="更新时间", help_text="更新时间", auto_now_add=True)mobile = models.CharField(verbose_name="手机号", help_text="手机号", max_length=11,default="", blank=True)img = models.ImageField(verbose_name="广告图片", help_text="广告图片",upload_to="static/advImg/", default="")class Meta:# 指定数据库在后台显示的名字verbose_name = "广告信息表"verbose_name_plural = verbose_namedb_table = 'Adv'
# admin.pyfrom django.contrib import admin
from Blog.models import Blog, Adv@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['site_name', 'site_title', 'site_theme', 'article_category', 'article_tags']@admin.register(Adv)
class AdvAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['title', 'content', 'create_time', 'update_time', 'mobile', 'img']

Article应用:

# models.pyfrom django.db import models# 文章表
class Article(models.Model):title = models.CharField(verbose_name='标题', help_text='标题', max_length=32, null=True)desc = models.CharField(verbose_name='描述', help_text='描述', max_length=255, null=True)context = models.TextField(verbose_name='内容', help_text='内容', null=True)create_time = models.DateTimeField(verbose_name='发布时间', help_text='发布时间', auto_now_add=True, null=True)up_num = models.BigIntegerField(verbose_name='点赞数', help_text='点赞数', null=True)down_num = models.BigIntegerField(verbose_name='点踩数', help_text='点踩数', null=True)comment_num = models.BigIntegerField(verbose_name='评论数', help_text='评论数', null=True)# 多对多绑定标签表tags = models.ManyToManyField('ArticleTags', verbose_name='评论内容', help_text='评论内容',through='ArticleToTags', through_fields=['article', 'tag'])class Meta:# 指定数据库在后台显示的名字verbose_name = "文章表"verbose_name_plural = verbose_namedb_table = 'article'# 文章分类表
class ArticleCategory(models.Model):name = models.CharField(verbose_name='分类名称', help_text='分类名称', max_length=32, null=True)# 一对多绑定文章表article = models.ForeignKey('Article', verbose_name='评论内容', help_text='评论内容', on_delete=models.CASCADE,related_name='article_category', null=True)class Meta:# 指定数据库在后台显示的名字verbose_name = "文章分类表"verbose_name_plural = verbose_namedb_table = 'article_category'# 文章标签表
class ArticleTags(models.Model):name = models.CharField(verbose_name='标签名称', help_text='标签名称', max_length=32, null=True)## # 多对多绑定文章表# article = models.ForeignKey('Article', verbose_name='关联文章', help_text='关联文章', on_delete=models.CASCADE,#                             related_name='article_tags', null=True)class Meta:# 指定数据库在后台显示的名字verbose_name = "文章标签表"verbose_name_plural = verbose_namedb_table = 'article_tags'# 文章点赞点踩表
class UpDown(models.Model):up_num = models.BigIntegerField(verbose_name='点赞数', help_text='点赞数', null=True)down_num = models.BigIntegerField(verbose_name='点踩数', help_text='点踩数', null=True)# 一对多绑定用户表user = models.ForeignKey('User.Userinfo', verbose_name='关联用户', help_text='关联用户', on_delete=models.CASCADE,related_name='up_down', null=True)# 一对多绑定文章表article = models.ForeignKey('Article', verbose_name='关联文章', help_text='关联文章', on_delete=models.CASCADE,related_name='up_down', null=True)class Meta:# 指定数据库在后台显示的名字verbose_name = "文章点赞点踩表"verbose_name_plural = verbose_namedb_table = 'up_down'# 文章评论表
class Comment(models.Model):content = models.TextField(verbose_name='评论内容', help_text='评论内容', null=True)comment_time = models.DateTimeField(verbose_name='发布时间', help_text='发布时间', null=True)# 一对多绑定用户表user = models.ForeignKey('User.Userinfo', verbose_name='关联用户', help_text='关联用户', on_delete=models.CASCADE,related_name='comment', null=True)# 一对多绑定文章表article = models.ForeignKey('Article', verbose_name='关联文章', help_text='关联文章', on_delete=models.CASCADE,related_name='comment', null=True)# 自关联表 表示评论的上下级关系parent_comment = models.ForeignKey('self', verbose_name='上级评论', help_text='上级评论', on_delete=models.SET_NULL,blank=True, null=True, related_name='son_comment')class Meta:# 指定数据库在后台显示的名字verbose_name = "文章评论表"verbose_name_plural = verbose_namedb_table = 'comment'# 多对多绑定文章表和标签表
class ArticleToTags(models.Model):tag = models.ForeignKey('ArticleTags', verbose_name='关联标签', help_text='关联标签', on_delete=models.CASCADE,related_name='article_to_tags', null=True)article = models.ForeignKey('Article', verbose_name='关联文章', help_text='关联文章', on_delete=models.CASCADE,related_name='article_to_tags', null=True)class Meta:# 指定数据库在后台显示的名字verbose_name = "多对多绑定文章表和标签表"verbose_name_plural = verbose_namedb_table = 'article_to_tags'
# admin.pyfrom django.contrib import admin
from Article.models import Article, ArticleCategory, ArticleTags, UpDown, Comment, ArticleToTags@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['title', 'desc', 'context', 'create_time', 'up_num', 'down_num', 'comment_num']@admin.register(ArticleCategory)
class ArticleCategoryAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['name','article']@admin.register(ArticleTags)
class ArticleTagsAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['name']@admin.register(UpDown)
class UpDownAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['up_num', 'down_num', 'user', 'article']@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['content', 'comment_time', 'user', 'article', 'parent_comment']@admin.register(ArticleToTags)
class Article_To_TagsAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['tag', 'article']
mment)
class CommentAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['content', 'comment_time', 'user', 'article', 'parent_comment']@admin.register(ArticleToTags)
class Article_To_TagsAdmin(admin.ModelAdmin):# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段list_display = ['tag', 'article']

这篇关于BBS模型层搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808910

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

使用DeepSeek搭建个人知识库(在笔记本电脑上)

《使用DeepSeek搭建个人知识库(在笔记本电脑上)》本文介绍了如何在笔记本电脑上使用DeepSeek和开源工具搭建个人知识库,通过安装DeepSeek和RAGFlow,并使用CherryStudi... 目录部署环境软件清单安装DeepSeek安装Cherry Studio安装RAGFlow设置知识库总

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应