BBS项目(二)
BBS项目(二)

可以在本地写或虚拟环境
- 添加虚拟环境
- 如果虚拟环境启动报错:解决 query = query.decode(errors=‘replace‘) AttributeError: ‘str‘ object has no attribute ‘decode‘
- 解决办法
query = query.decode(errors='replace')
'''换成'''
query = errors='replace'
ORM 创建相关表
'''models.py'''
from django.contrib.auth.models import AbstractUser
from django.db import models
# Create your models here.
'''扩写auth_user表需要使用AbstractUser'''
# 用户表
class UserInfo(AbstractUser):
phone = models.CharField(max_length=32, null=True, verbose_name='手机号')
# 头像
avatar = models.FileField(upload_to='avatar/', default='avatar/default.png', verbose_name='头像')
blog = models.OneToOneField(to='Blog', on_delete=models.CASCADE, null=True, verbose_name='博客表外键')
# 博客表
class Blog(models.Model):
# 博客标题
site_title = models.CharField(max_length=32)
# 博客名称
site_name = models.CharField(max_length=32)
# 博客样式
# 每个人的样式不同,添加文件地址
site_style = models.CharField(max_length=32)
def __str__(self):
return self.site_title # print对象打印
class Meta:
# admin进入以后看到的名字
verbose_name_plural = '博客表'
# 标签表
class Tag(models.Model):
name = models.CharField(max_length=32)
blog = models.ForeignKey(to='Blog', on_delete=models.CASCADE)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = '标签表'
# 分类表
class Category(models.Model):
name = models.CharField(max_length=32)
blog = models.ForeignKey(to='Blog', on_delete=models.CASCADE)
def __str__(self):
return self.name
# 文章表
class Article(models.Model):
title = models.CharField(max_length=32, verbose_name='文章标题')
# help_text:提示信息,只针对于admin
desc = models.CharField(max_length=128, verbose_name='文章摘要', help_text='这里写入文章摘要~')
# 文本内容
content = models.TextField()
# 创建时间
create_time = models.DateTimeField(auto_now_add=True)
# 优化字段,减少数据库查询操作,评论数,点赞数
# up_num = models.IntegerField(default=0)
# down_num = models.IntegerField(default=0)
# commit_num = models.IntegerField(default=0)
# 关联关系
blog = models.ForeignKey(to='Blog', on_delete=models.CASCADE)
category = models.ForeignKey(to='Category', on_delete=models.CASCADE)
# 多对多关系,through:第三张表,through_fields:关联字段
'''注意through_fields填写关联字段,当前在哪个表,第一个就是哪个字段'''
tag = models.ManyToManyField(to='Tag', through='TagToArticle', through_fields=('article', 'tag'))
def __str__