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.hqwc.cn/news/539370.html

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

相关文章

PyCharm创建一个简单的Django项目

1.Django简介 Django 是一个开放源代码的 Web 应用程序框架,由 Python 编写而成。它遵循 MVC(模型-视图-控制器)的软件设计模式,采用了 MTV(模型-模板-视图)的架构。Django 的设计目标是使开发复杂的、数据…

Ultra Fast Structure-aware Deep Lane Detection的训练实战

Ultra Fast Structure-aware Deep Lane Detection的训练实战 1、模型介绍 论文 知乎 代码 CULane数据集简介 2、基于CULane数据集格式的训练 2.1、video to img import glob import os import cv2# --------视频转图像----------------------------------------- def vide…

Self-supervised Contextual Keyword and Keyphrase Retrieval with Self-Labelling

文章目录 题目摘要方法数据集实验 题目 通过自我标记进行自我监督的上下文关键字和关键词短语检索 论文地址:https://www.preprints.org/manuscript/201908.0073/v1 项目地址:https://github.com/naister/Keyword-OpenSource-Data 摘要 在本文中&#x…

最新的yolov9,目标检测使用教程

1.克隆仓库,仓库地址: https://github.com/WongKinYiu/yolov9/tree/main 百度盘地址:https://pan.baidu.com/s/15v7XJIMDFG3XHJXfFs6ZDA 密码:1234 除了这两个模型,另外三个模型有问题...,下载ce模型即可 …

openGauss学习笔记-242 openGauss性能调优-SQL调优-典型SQL调优点-SQL自诊断

文章目录 openGauss学习笔记-242 openGauss性能调优-SQL调优-典型SQL调优点-SQL自诊断242.1 SQL自诊断242.1.1 告警场景242.1.2 规格约束 openGauss学习笔记-242 openGauss性能调优-SQL调优-典型SQL调优点-SQL自诊断 SQL调优是一个不断分析与尝试的过程:试跑Query&…

设计模式在业务中的实践

一、前言 随着美团外卖业务的不断迭代与发展,外卖用户数量也在高速地增长。在这个过程中,外卖营销发挥了“中流砥柱”的作用,因为用户的快速增长离不开高效的营销策略。而由于市场环境和业务环境的多变,营销策略往往是复杂多变的…

Qt多线程问题3:基于线程同步实现生产者消费者模型

之前自己写了一个收数据的功能,但是没有数据的时候就要不停监听,那监听多久合适呢?1ms ?10 ms ? 100ms?但是你也不确定数据什么时候来,那么就可以使用经典的生产者消费者模型。这次的实验中我参考了人民邮…

CentOS7.9 Nginx + EMQX集群组建 MQTTS平台

前面我们有介绍过单机版EMQX的安装 CentOS7 安装 EMQX(MQTT),今天我们来讲一下实际项目里用的到MQTTS平台。 一、EMQX单机配置 简单部署两个节点,修改对应配置文件 (/usr/local/emqx/etc/emqx.conf) 中的node内容: nam…

sqllab第十八关通关笔记

知识点: UA注入 不进行url解析,不能使用 %20 编码等操作出现在User-agent字段中一般为insert语句 insert 表名(字段1,字段2,。。。) values(数据1,数据2,。。。) 通过admin admin进行登录发现页面打印出了…

【投稿优惠-EI稳定检索】2024年图像处理与机械系统工程国际学术会议 (ICIPMSE 2024)

【投稿优惠-EI稳定检索】2024年图像处理与机械系统工程国际学术会议 (ICIPMSE 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 图像处理 基于图像的渲染 计算机视觉 可视化分析 模式识别 3D打印 渲染和动画 渲染技术 电脑动画 基于草图的建模 机械…

Spring boot创建第一个项目

作者简介: zoro-1,目前大二,正在学习Java,数据结构,spring等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 Spring boot创建第一个项目 sp…

ELK日志管理实现的3种常见方法

ELK日志管理实现的3种常见方法 1. 日志收集方法 1.1 使用DaemonSet方式日志收集 通过将node节点的/var/log/pods目录挂载给以DaemonSet方式部署的logstash来读取容器日志,并将日志吐给kafka并分布写入Zookeeper数据库.再使用logstash将Zookeeper中的数据写入ES,并通过kibana…