BBS
目录
BBS前期装备
数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'bbs',
'USER': 'root',
'PASSWORD': 'root',
'HOST' : '127.0.0.1',
'PORT' : 3306,
'CHARSET' : 'utf8',
'OPTIONS': {
'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"',
'charset': 'utf8mb4'
}
}
}
表创建
from django.db import models
from django.contrib.auth.models import AbstractBaseUser
# Create your models here.
class UserInfo(AbstractBaseUser):
phone = models.BigIntegerField(null=True)
avatar = models.FileField(upload_to='avatar/', default='avatar/default.jpg')
create_time = models.DateField(auto_now_add=True)
blog = models.OneToOneField(to='Blog', null=True)
class Blog(models.Model):
site_name = models.CharField(max_length=32)
site_title = models.CharField(max_length=64)
site_theme = models.CharField(max_length=64)
class Category(models.Model):
name = models.CharField(max_length=32)
blog = models.ForeignKey(to='Blog', null=True)
class Tag(models.Model):
name = models.CharField(max_length=32)
blog = models.ForeignKey(to='Blog', null=True)
class Article(models.Model):
title = models.CharField(max_length=64)
desc = models.CharField(max_length=256)
content = models.TextField()
create_time = models.DateField(auto_now_add=True)
# 数据库优化字段
comment_num = models.BigIntegerField(default=0)
up_num = models.BigIntegerField(default=0)
down_num = models.BigIntegerField(default=0)
# 外键字段
blog = models.ForeignKey(to='Blog', null=True)
tags = models.ManyToManyField(to='Tag', through='Article2Tag', through_fields=('article', 'tag'))
category = models.ForeignKey(to='Category', null=True)
class Article2Tag(models.Model):
article = models.ForeignKey(to='Article')
tag = models.ForeignKey(to='Tag')
class UpandDown(models.Model):
user = models.ForeignKey(to='UserInfo')
article = models.ForeignKey(to='Article')
is_up = models.BooleanField()
class Common(models.Model):
user = models.ForeignKey(to='UserInfo')
article = models.ForeignKey(to='Article')
content = models.CharField(max_length=255)
create_time = models.DateTimeField(auto_now_add=True)
parent = models.ForeignKey(to='self', null=True)
静态文件配置
forms表单
添加bootstrap样式
widgets点不出来时可以重新导一下 from django.forms import widgets
渲染前端页面的方式
{% foo in form_obj %}
<p> {{foo.lable}}:{{foo}}</p>
{% endfor%}
forms表单展示错误信息
foo.errors本身信息是一个列表 无法显示颜色 .o可以获取列表第一个元素 是一个纯文本就有颜色了
可以通过更改forms表单里的error_messags的数据来更改提示的错误信息
文件阅读器
.change 当框内容改变时触发 .onload 会等项目完全执行完才执行
由于第3部是一个异步操作 所有利用onload 等fileReader完全执行完才执行
注册功能
前端获取数据
获取文件
$()[0]获取jQuery对象转化为JavaScript对象,这样才可以使用JavaScript对象的属性和方法
.files[0]是JavaScript的属性 就是获取文件
.each()
循环 jquery中的for循环
.serializeArray()
会将form标签内部所有的普通键值对打包成一个数组套自定义对象的行式
ajax传输文件
ajax传输文件必须修改这两个参数
跳转页面
跳转页面(路径记得加/)
添加class属性
addClass() 方法向被选元素添加一个或多个类。该方法不会移除已存在的 class 属性,仅仅添加一个或多个 class 属性。提示:如需添加多个类,请使用空格分隔类名。
has_error:这是个固定写法,表示输入框出现错误时,框框会报红,而当光标聚焦输入框时,又会恢复原来的颜色
后端逻辑判断
字典
ajax请求要有一个后端回调的函数,这里通常设置一个字典用于传到前端
里面还可以加url键值,然后用jsonresponse包裹传到前端,前段可以直接用