bbs项目知识点汇总

一. JavaScript

1 替换头像

 $('#mdd').on('change',function () {
        // 需要利用内置对象 FileReader完成文件的读取操作
        let MyFileReader = new FileReader();
        // 获取用户上传的文件对象
        let fileObj = $(this)[0].files[0];
        // 让文件阅读器 读取文件
        MyFileReader.readAsDataURL(fileObj);  // IO操作   异步
        // 将读取之后的内容替换到img标签src属性中
        MyFileReader.onload = function(){  // 等待文件阅读器读取完毕之后再执行下面的代码
             $('#img').attr('src',MyFileReader.result)
        }
    });

2 form表单拿数据

// 将用户输入的数据全部发送给后端     普通的键值对   文件
        let MyFormData = new FormData();
        // 不停的朝里面添加键值对
        {#MyFormData.append('','')#}
        {#console.log($('#myform').serializeArray())#}
        // 普通键值对添加完毕 (利用form标签内部有一个自动序列化普通键值对方法)
        $.each($('#myform').serializeArray(),function (index,obj) {
            MyFormData.append(obj.name,obj.value)
        });
        // 手动添加文件数据
        MyFormData.append('avatar',$('#mdd')[0].files[0]);

3 form组件error信息渲染

$.each(data.msg,function (index,obj) {
                        {#console.log(index,obj)#} // index就是报错字段  obj就是错误信息 数组的形式
                        // 获取报错字段  手动拼接处该字段所对应的input框的id值
                        let targetId = '#id_' + index;
                        $(targetId).next().text(obj[0]).parent().addClass('has-error')

4 添加html代码

 // 将生成好的内容添加到ul标签内部
 $('.list-group').append(tmp);
 // 将评论框中的内容清空
 $("#id_comment").val('');
 // 将全局的parentid再制成空null

5 聚焦操作

    $('input').focus(function () {
        $(this).next().text('').parent().removeClass('has-error')
    });

    $('#code').click(function () {
        // 获取src属性 在此基础之上 修改一下即可
        var oldSrc = $(this).attr('src');
        $(this).attr('src',oldSrc + '?')
    });

二 . html在线编辑器

官网

    <script charset="utf-8" src="/static/kindeditor/kindeditor-all-min.js"></script>
    <script>
        KindEditor.ready(function (K) {
            window.editor = K.create('#id_comment',{
                width: '100%',
                height:'450px',
                resizeType:0,
                uploadJson : '/upload_img/',
                extraFileUploadParams : {
                        csrfmiddlewaretoken : '{{ csrf_token }}',
                }
            });
        });
    </script>

三 . 后端图片生成

# 下载
pip install pillow
from PIL import Image,ImageDraw,ImageFont
from io import BytesIO,StringIO

"""
内存管理器模块
BytesIO  保存数据 并且在获取的时候 是以二进制的方式给你
StringIO  保存数据 并且在获取的时候 是以字符串的方式给你
"""
"""
Image       生成图片
ImageDraw   在图片上写字
ImageFont   控制字的字体样式
"""
    # (最终推导)  在图片上写字
    img_obj = Image.new('RGB',(360,35),get_random())
    # 将生成好的图片对象交给ImageDraw
    img_draw = ImageDraw.Draw(img_obj)  # 生成了一个画笔对象
    # 字体样式
    img_font = ImageFont.truetype('static/font/111.ttf',30)
    # 随机验证码    大小写英文加数字   五位 每一位都可以是大写字母或小写字母或数字
    code = ''
    for i in range(5):
        upper_str = chr(random.randint(65,90))
        lower_str = chr(random.randint(97,122))
        random_int = str(random.randint(0,9))
        # 随机选取一个
        tmp = random.choice([upper_str,lower_str,random_int])
        # 朝图片上写一个
        img_draw.text((i*60+60,0),tmp,get_random(),img_font)
        # 存储写的字
        code += tmp
    print(code)
    # 这个验证码后面其他视图函数可能要用到  找个地方存储一下 并且这个地方全局的视图函数都能访问
    request.session['code'] = code
    # 生成二进制数据文件对象
    io_obj = BytesIO()
    # 保存图片格式
    img_obj.save(io_obj,'png')
    # 获取到文件二进制
    response = io_obj.getvalue()
    # 返回数据
    return HttpResponse(response)

四. 简单使用BeautifulSoup

pip install beautifulsoup4
# 导入
from bs4 import BeautifulSoup
        # 先生成一个模块对象
        soup = BeautifulSoup(content,'html.parser')
        # print(soup.text)  # 获取纯文本
        tags = soup.find_all()
        # print(tags)
        for tag in tags:
            if tag.name == 'script':
                tag.decompose()  # 删除标签

五 . 使用auth组件保存用户上传文件

        file_obj = request.FILES.get("avatar")
        request.user.avatar = file_obj
        request.user.save()

六 . BBS内复杂的orm

# .当前这篇文章用户是否已经点过
is_click=models.UpAndDown.objects.filter(user=request.user,article=article_obj).exists()

models.Article.objects.filter(pk=article_id).update(up_num = F('up_num') + 1)
# 查询当前用户每一个分类及分类下的文章数
category_list = models.Category.objects.filter(blog=blog).annotate(num=Count('article')).values_list('name','num','pk')
# 2.查询当前用户每一个标签级标签下的文章数
tag_list = models.Tag.objects.filter(blog=blog).annotate(num=Count('article')).values_list('name','num','pk')

 # 3.按照年月分组
from django.db.models.functions import TruncMonth

date_list = models.Article.objects.filter(blog=blog).annotate(month=TruncMonth('create_time')).values('month').annotate(num=Count('pk')).values_list('month','num')

models.Article.objects.filter(pk=article_id).update(comment_num = F('comment_num') + 1)

obj_list = []
for tag_id in tags_list:
    obj_list.append(models.Article2Tag(article=article_obj,tags_id=tag_id))
models.Article2Tag.objects.bulk_create(obj_list)  

BBS项目知识点汇总的更多相关文章

  1. Django项目知识点汇总

    目录 一.wsgi接口 二.中间件 三.URL路由系统 四.Template模板 五.Views视图 六.Model&ORM 七.Admin相关 八.Http协议 九.COOKIE 与 SES ...

  2. nginx几个知识点汇总

    WHY? 为什么用Nginx而不用LVS? 7点理由足以说明一切:1 .高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2 - 3 万并发连接数.?2 .内存消耗少: 在 3 万 ...

  3. BBS项目详解(forms快速创建登陆页面,登陆验证、通过阅读器进行头像上传的预览、内存管理器)

    BBS项目涉及的知识点 django中知识点 钩子函数(局部钩子和全局钩子) 1.局部钩子就是用来做合法性校验,比如用户名有没有被使用等 2.全局的就是用来做对比校验,比如两次输入的密码是否一致 3. ...

  4. auth复习和BBS项目的登录(1)

    auth复习 auth组件 验证:authenticate(request,username='andy',password='123) 登录:login(request,user) 注销:login ...

  5. python 自动化之路 day 20 Django进阶/BBS项目【一】

    一.django进阶 1.django orm 增删改查 1.1.创建表: 1 2 3 >>> from blog.models import Blog >>> b ...

  6. 前端开发 JavaScript 干货知识点汇总

    很多初学的朋友经常问我,前端JavaScript都需要学习哪些东西呀?哪些是JavaScript的重点知识啊? 其实做前端开发工程师,所有的知识点都是我们学习必备的东西,只有扎实的技术基础才是高薪的关 ...

  7. 小福bbs—项目系统设计与数据库设计

    这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 实现对校园论坛软件的制作,使其能够发布帖子,查看信息等 作业的正文 小福bbs--项目需求分析 ...

  8. ECMAScript版本知识点汇总

    ECMAScript版本知识点汇总 ES5 btoa.atob 对参数进行base64格式编码.解码 /** * btoa() * base64编码 * @param {string} str * @ ...

  9. H5项目常见问题汇总及解决方案

    H5项目常见问题汇总及解决方案 H5   2015-12-06 10:15:33 发布 您的评价:       4.5   收藏     4收藏 H5项目常见问题及注意事项 Meta基础知识: H5页 ...

随机推荐

  1. 2018092609-2 选题 Scrum立会报告+燃尽图 01

    此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2019fall/homework/8683] 一.小组情况组长:迟俊文组员:宋晓丽 梁梦瑶 韩昊 刘信鹏队名 ...

  2. 使用 Topshelf 组件一步一步创建 Windows 服务 (2) 使用Quartz.net 调度

    上一篇说了如何使用 Topshelf 组件快速创建Windows服务,接下来介绍如何使用 Quartz.net 关于Quartz.net的好处,网上搜索都是一大把一大把的,我就不再多介绍. 先介绍需要 ...

  3. linux工作调度(计划任务)

    linux工作调度有两种:at,cron · at:at是一个可以处理仅执行一次就结束调度的命令.说白了就是在某个时间需要干某一件事,例如在2018年10月12日下午一点要执行一个数据库矫正脚本. · ...

  4. Java中的Calendar 类和SimpleDateFormat 类

    1.Calendar 类:import java.util.Calendar;               Calendar cal = Calendar.getInstance();        ...

  5. 2019牛客暑期多校训练营(第九场) E-All men are brothers(并查集+组合数学)

    >传送门< 题意:最初有 n个人且互不认识,接下来 m行,每行有 x,y表示x和y交朋友,朋友关系满足自反性和传递性,每次输出当前选取4个人且互不认识的方案数. 思路:比赛的时候知道是用并 ...

  6. 手机端web(iPad)页面自适应js

    有关编写手机页面(ipad页面)自适应的方法有很多,比如:bootstrap,rem等等.下面分享给大家一个js控制viewPort视区自适应缩放的方法(我给它命名为phone.js): 将phone ...

  7. Linux机器相互登录

    1周第4次课(3月22日)课程内容: 1.16 Linux机器相互登录 Linux相互登录可以分2种方式,一种为ssh +IP地址,然后输入对应的root密码,一种为密钥验证方式,其中一台机器放公钥, ...

  8. mysql那些事(5)建表存储引擎的选择

    在mysql见表的时候,会遇到选择存储引擎:MyISAM和InnoDB.究竟用哪种存储引擎好呢? 1.MyISAM:表锁:支持全文索引:读并发性能较好. 2.InnoDB:行锁:支持事务,支持外键:写 ...

  9. Python一秒搭建ftp服务器,帮助你在局域网共享文件【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  10. 转:Eclipse中创建Maven版的Web工程(详解)

    一.搭建步骤 ♦首先创建一个Maven的Project,如下图: ♦点击Next,勾选 Create a simple project ♦点击Next,注意Packing要选择war,因为我们创建的是 ...