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

相关文章

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

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

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能