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']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原生js html5 canvas制作flappy bird压扁小鸟游戏

可以以电脑浏览器的手机模式打开,也可以在手机浏览器中直接打开 游戏运用了Canvas的drawImage,translate,rotate,save,restore,fillRect等API。 采用中介者模式,Game类统领全局,负责…

冒泡排序,详详解解

目录 基本概念: 上图: 核心思路: 基本步骤: 关键: 代码核心: 补充: 代码(规范) : 代码(优化): 今天我们不刷力扣了&…

HTML5、CSS3面试题(二)

上一章:HTML5、CSS3面试题(一) 哪些是块级元素那些是行内元素,各有什么特点 ?(必会) 行内元素: a、span、b、img、strong、input、select、lable、em、button、textarea 、selecting 块级元素&#xff1…

Rust中derive宏的作用及常用trait

在Rust代码经常可以看到在struct的上面,有一行#[derive(Clone, Debug)]这样的代码。dervice是Rust的内置宏,可以自动为struct或是enum实现某些的trait。 在下面的代码中,Book struct 通过derive宏自动实现了Debug、Clone和PartialEq这三个tra…

idea操作

我的一些总结,后续会陆续添加 代码编辑相关: 格式化代码:Ctrl Alt L (Windows) / Command Option L (Mac) 快速修复:Alt Enter 查找定义:Ctrl 鼠标左键单击 (Windows) / Command 鼠标左键单击 (Mac) 多行编辑…

vue3 打印局部网页、网页下载为图片、下载为pdf-自动分页,几行代码搞定

经常有一些需求&#xff0c;要将网页保存为一张图片&#xff0c;感觉异常困难&#xff0c;这里发现一个简单的办法。 这么简单&#xff0c;直接一句哇塞&#xff0c;老板&#xff1a;马上完成任务。 先安装几个依赖 npm i howuse html2canvas jspdf 下载图片代码 <button …

L1 - 006 连续因子

思路&#xff1a;1.要求最长的连续因子序列&#xff0c;我们需要知道序列的长度和序列的起点。 2.对于起点 i 来说&#xff0c;他不能超过 n 的平方根&#xff0c;在循环时从 2 到 sqrt(n) 。用到变量&#xff1a;记录个数num&#xff0c;起点start&#xff0c;最大个数maxnum…

Qt篇——QChartView获取鼠标停留位置的数值

需求&#xff1a;鼠标停留在QChartView上时&#xff0c;想要计算停留位置的数值。 一开始的方法是想要通过鼠标移动事件计算鼠标在QChartView上的坐标&#xff0c;在换算成数值&#xff0c;后来发现QChartView中除了图表数据&#xff0c;还有坐标轴与坐标轴数值标签占了高度&a…

How to install teams in ubuntu

Download deb file download link: https://mirrors.sdu.edu.cn/spark-store-repository/store/office/teams/ install deb sudo apt install ./teams_1.5.00.23861_amd64.deb open and login teams.

基于单片机的车载酒精含量自检系统设计与实现

摘要:调查显示,大约50%的交通事故与酒后驾车有关,酒后驾车已成为车祸致死的首要原因。为从根本上杜绝酒后驾车,设计了一款基于STC89C52 单片机的车载酒精含量自检系统,该系统能很好地解决酒驾问题,控制简单、使用方便,具有很好的应用价值。 关键词:STC89C52 单片机;车…

ubuntu编译rk3588异常

问题现象 在ubuntu上编译 rk3588 的kernel时&#xff0c;报如下错误&#xff1a; LZ4C arch/arm64/boot/Image.lz4 Incorrect parameters Usage : lz4 [arg] [input] [output] input : a filename with no FILE, or when FILE is - or stdin, read sta…

JavaEE企业开发新技术2

目录 2.7 Field类的基本概念 文字性概念描述&#xff1a; Field类 2.8 Field的基本操作-1 2.9 Field的基本操作-2 分析&#xff1a; 2.10 Field 的综合练习 总结&#xff1a; 和equals的区别&#xff1a; 使用 比较 使用equals比较 2.7 Field类的基本概念 文字性…

.NET高级面试指南专题十七【 策略模式模式介绍,允许在运行时选择算法的行为】

介绍&#xff1a; 策略模式是一种行为设计模式&#xff0c;它允许在运行时选择算法的行为。它定义了一系列算法&#xff0c;将每个算法封装到一个对象中&#xff0c;并使它们可以互相替换。这使得算法可独立于使用它的客户端变化。 原理&#xff1a; 策略接口&#xff08;Strat…

CVPR2024 | 大核卷积新高度101x101,美团提出PeLK

https://arxiv.org/pdf/2403.07589.pdf 本文概述 最近&#xff0c;一些大核卷积网络以吸引人的性能和效率进行了反击。然而&#xff0c;考虑到卷积的平方复杂度&#xff0c;扩大内核会带来大量的参数&#xff0c;而大量的参数会引发严重的优化问题。由于这些问题&#xff0c;当…

安卓之四大组件

组件描述Activity(活动)在应用中的一个Activity可以用来表示一个界面&#xff0c;意思可以理解为“活动”&#xff0c;即一个活动开始&#xff0c;代表 Activity组件启动&#xff0c;活动结束&#xff0c;代表一个Activity的生命周期结束。一个Android应用必须通过Activity来运…

蓝桥杯刷题|01入门真题

[蓝桥杯 2020 省 AB1] 解码 题目描述 小明有一串很长的英文字母&#xff0c;可能包含大写和小写。 在这串字母中&#xff0c;有很多连续的是重复的。小明想了一个办法将这串字母表达得更短&#xff1a;将连续的几个相同字母写成字母 出现次数的形式。 例如&#xff0c;连续…

Xcode 15.3 Archive失败

Xcode 15.3 Archive失败 背景 升级 Xcode 到 15.3&#xff0c;真机运行正常。打包的时候发现 Archive 失败。 提示&#xff1a; Call parameter type does not match function signature! 仔细看报错里是和HandyJSON相关的提示。 解决 起初以为和 Pod 库有关系&#xff0c;…

docker容器启动rabbitmq

docker容器启动rabbitmq 一、RabbitMQ部署1.1.在线拉取mq镜像1.2.运行mq容器1.3.访问mq 二、RabbitMQ的集群2.1.集群分类2.1.设置 /etc/hosts文件 endl 一、RabbitMQ部署 1.1.在线拉取mq镜像 # 在线拉取 docker pull rabbitmq:3-management1.2.运行mq容器 docker run \ -e R…

什么是单向数据流

单向数据流是一种数据流动的模式&#xff0c;通常用于前端框架&#xff08;如 React、Vue 等&#xff09;中。在单向数据流中&#xff0c;数据只能从一个方向流向另一个方向&#xff0c;不会出现数据的双向流动。这种模式有助于简化数据的管理和状态的维护&#xff0c;提高代码…

Kafka-生产者报错javax.management.InstanceAlreadyExistsException

生产者发送消息到 kafka 中,然后控制台报错 然后根据日志查看 kafka 的源码发现了问题原因 说的是MBean已经注册了,然后报异常了,这样就会导致生产者的kafka注册失败, 原因是项目上生产者没有配置clientId,默认都是空导致的, 多个生产者(项目)注册到kafka集群中的 id 都相同。 …