BBS总结

BBS总结:

九个功能:

登录:

验证码的形成,首先形成一个image对象,可调节宽高,rgb参数调节颜色,再生成一个imagefont对象调节字体,

然后利用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

 

八张表:用户表,博客表,文章表,分类表,标签表(第三张表),评论表,点赞点踩表

 

 

在admin后台中使用富文本编辑器

 

一.建立模型:(安装django-tinymce==2.6.0)

                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)

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/sima-3/p/11525429.html