目录前端
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)
widgets点不出来时能够从新导一下 from django.forms import widgetspython
{% foo in form_obj %} <p> {{foo.lable}}:{{foo}}</p> {% endfor%}
foo.errors自己信息是一个列表 没法显示颜色 .o能够获取列表第一个元素 是一个纯文本就有颜色了mysql
能够经过更改forms表单里的error_messags的数据来更改提示的错误信息jquery
.change 当框内容改变时触发 .onload 会等项目彻底执行完才执行ajax
因为第3部是一个异步操做 全部利用onload 等fileReader彻底执行完才执行sql
$()[0]获取jQuery对象转化为JavaScript对象,这样才能够使用JavaScript对象的属性和方法数据库
.files[0]是JavaScript的属性 就是获取文件django
循环 jquery中的for循环json
会将form标签内部全部的普通键值对打包成一个数组套自定义对象的行式bootstrap
ajax传输文件必须修改这两个参数
跳转页面(路径记得加/)
addClass() 方法向被选元素添加一个或多个类。该方法不会移除已存在的 class 属性,仅仅添加一个或多个 class 属性。提示:如需添加多个类,请使用空格分隔类名。
has_error:这是个固定写法,表示输入框出现错误时,框框会报红,而当光标聚焦输入框时,又会恢复原来的颜色
ajax请求要有一个后端回调的函数,这里一般设置一个字典用于传到前端
里面还能够加url键值,而后用jsonresponse包裹传到前端,前段能够直接用