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

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

Spring Cloud GateWay搭建全过程

《SpringCloudGateWay搭建全过程》:本文主要介绍SpringCloudGateWay搭建全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Spring Cloud GateWay搭建1.搭建注册中心1.1添加依赖1.2 配置文件及启动类1.3 测

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Gradle下如何搭建SpringCloud分布式环境

《Gradle下如何搭建SpringCloud分布式环境》:本文主要介绍Gradle下如何搭建SpringCloud分布式环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Gradle下搭建SpringCloud分布式环境1.idea配置好gradle2.创建一个空的gr