BBS总结
九个功能:
登录:
然后利用imagedraw画板在画板上写字,形成五个随机的字母或数字,并且将验证码存到session中,再利用bytesIO对象
将图片保存至内存,最后取出通过模板渲染到前台页面
登录认证可通过auth.authenticate进行验证,通过后auth.login一下,验证码可通过request.session进行获取验证,response是个大字典,包括
状态码和msg,通过jsonresponse可渲染到模板,ajax回调后判断状态码,如果是100就定向跳转到主页面,否则渲染错误
信息到登录页面
注册:
利用form组件进行后台数据校验的,可规定字符串长短,是否为空,wedget改变input框样式,局部钩子可校验单个字段,命名clean_username,返回正确字段,全局钩子可校验多个
字段,返回的是clean_data,后台形成一个form对象,点is_valid方法即可判断校验是否通过,如果通过把re_pwd数据删除,并且判断图片文件是否上传,若传了,把它也放到
clean_data字典中,**打散后用create_user添加记录注册,如果验证不通过,错误信息都在errors中,通过response字典返回模板渲染,模板中用change事件取到图片对象,把它读
入一个文件阅读器,再用onload加载后即可渲染到前台页面,ajax也是通过formdata格式编码提交文件,所以可形成一个formdata对象,把字段名,字段值append到其中即可,注意
csrf_token也要包括在内,错误信息渲染注意的是单个字段和全局错误信息(all),注册成功跳转到登录页面.
主页:
借助bootstrap搭建页面,导航条渲染时可借助is_authenticated判断用户是否登录,如果登录展示个人中心,可点击注销退出,未登录跳转登录页面,主页面用栅格系统布局,两侧是
广告,中间是文章名,摘要,作者姓名,头像等
个人站点
通过(头像及作者姓名)跳转到个人站点, 通过有名分组将路由作者姓名传到后台,可通过视图函数进行校验,首先校验作者是否存在,不存在渲染到error.html页面(参照博客园
404页面), 个人站点后台需要提交到前台渲染的数据有: 文章列表,不同分类,标签,随笔档案的文章数,当用户点击分类,标签,随笔档案时,其他页面内容不动,把点击那一栏的文
章删选出来即可,过滤路由是 用户名/tag/tag_id的格式
文章详情
点击个人站点文章title即可关联到文章详情路由找到其视图函数, 通过有名分组拿到用户名和文章id,找到该文章对象渲染到前端页面,这里用到了母版的继承,文章详情展示了
以下内容: 文章title, 文章content (传html文件,用safe转义),点赞点踩,评论列表,评论内容
点赞点踩
通过点击事件以jq对象点hasclass的方法判断点赞与否,利用ajax将数据提交到后台,通过过滤文章和用户生成点赞点踩对象,判断是否存在,不存在则开启事务,将点赞点踩表创
建记录的同时,把文章表的点赞或点踩数也加一,虽然数据库中点赞点踩数已经加一,但只有在页面全局刷新时才会改变,所以在ajax回调之后将其手动加一
根子评论:
开启事务,在评论表添加记录的同时,也在文章表添加评论数,前端模板渲染的评论列表根评论包括几楼,评论时间,用户及内容,子评论多一个@父评论用户名及内容,对于ajax
局部刷新时,用es6字符串替换的方式,将替换内容append到评论内容的jq对象即可
后台展示
文章添加
添加文章视图函数:用bs4来解析html文档,删除script标签内容来防止xss
八张表:用户表,博客表,文章表,分类表,标签表(第三张表),评论表,点赞点踩表
from django.db import models
from tinymce.models import HTMLField
# Create your models here.
class GoodTest(models.Model):
status_choices = (
(0, '下线'),
(1, '上线')
)
status = models.SmallIntegerField(default=1, choices=status_choices, verbose_name='状态')
# 富文本类型:带有格式的文本
detail = HTMLField(blank=True, verbose_name='商品详情')
二.在settings.py中完成配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config',
'tinymce',
]
TINYMCE_DEFAULT_CONFIG = {
'theme': 'advanced',
'width': 600,
'height': 400,
}
三.路由分发
url('tinymce/', include('tinymce.urls')), # 富文本编辑器
四. admin.py中完成注册
from app01.models import GoodTest
# Register your models here.
admin.site.register(GoodTest)