目录
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包裹传到前端,前段可以直接用