每日测验

"""
今日考题:
1.简述自定义标签,过滤器,inclusion_tag的方法,并简要说一说三者的特点及响应流程
2.简述个人侧边栏展示及筛选业务逻辑
3.简述点赞点踩业务逻辑(前后端分开描述)
4.简述根评论业务逻辑(前后端分开描述)
"""

内容回顾

  • 侧边栏制作inclusion_tag

    """
    1.当一个页面的局部需要再多个页面使用并且还需要传参数 自定义inclusion_tag步骤
    1.在应用下创建名字必须叫templatetags文件夹
    2.文件夹内创建任意名称的py文件
    3.py文件内先书写固定的两行代码
    from django import template
    register = template.Library() @register.inclusion_tag(left_menu.html)
    def index():
    准备上述页面需要的数据
    return locals()
    """
  • 点赞点踩

    # 前端页面
    1.拷贝博客园点赞点踩前端样式
    html代码 + css代码
    2.如何判断用户到底点击了哪个图标
    恰巧页面上只有两个图标,所以给两个图标标签添加一个公共的样式类
    然后给这个样式类绑定点击事件
    再利用this指代的就是当前被操作对象 利用hasClass判断是否有某个特定的类属性,从而判断出到底是两个图标中的哪一个
    3.书写ajax代码朝后端提交数据 4.后端逻辑书写完毕之后 前端针对点赞点踩动作实现需要动态展示提示信息
    1.前端点赞点踩数字自增1 需要注意数据类型的问题
    Number(old_num) + 1
    2.用户没有登陆 需要展示没有登陆提示 并且登陆可以点击跳转
    html()
    |safe
    mark_safe()
    # 后端逻辑
    1.先判断用户是否登陆
    request.user.authenticated()
    2.再判断当前文字是否是当前用户自己写的
    通过文章主键值获取文章对象
    之后利用orm查询获取文章对象对应的用户对象与request.user比对
    3.判断当前用户是否已经给当前文章点了
    利用article_obj文章对象和request.user用户对象去点赞点踩表中筛选数据如果有数据则点过没有则没点
    4.操作数据库 需要注意要同时操作两张表
    # 前端发送过来的是否点赞是一个字符串 需要你自己转成布尔值或者用字符串判断
    is_up = json.loads(is_up)
    F模块
    """
    总结:在书写较为复杂的业务逻辑的时候,可以先按照一条线书写下去
    之后再去弥补其他线路情况
    类似于先走树的主干 之后再分散
    """
  • 评论

    # 先写根评论
    先吧整体的评论功能跑通 再去填补
    1.书写前端获取用户评论的标签
    可能点赞点踩有浮动带来的影响
    clearfix
    2.点击评论按钮发送ajax请求 3.后端针对评论单独开设url处理
    后端逻辑其实非常的简单非常的少 4.针对根评论涉及到前端的两种渲染方式
    1.DOM操作临时渲染评论楼
    需要用到模版字符串
    // 临时渲染评论楼
    let userName = '{{ request.user.username }}';
    let temp = `
    <li class="list-group-item"> <span>${userName}</span>
    <span><a href="#" class="pull-right">回复</a></span>
    <div>
    ${conTent}
    </div>
    </li>
    `
    // 将生成好的标签添加到ul标签内
    $('.list-group').append(temp);
    2.页面刷新永久(render)渲染
    后端直接获取当前文章对应的所有评论 传递给html页面即可
    前端利用for循环参考博客园评论楼样式渲染评论 3.评论框里面的内容需要清空
    # 再考虑子评论
    从回复按钮入手
    点击回复按钮发生了哪些事
    1.评论框自动聚焦 .focus()
    2.评论框里面自动添加对应评论的评论人姓名
    @username\n
    思考:
    1.根评论和子评论点的是同一个按钮
    2.根评论和子评论的区别
    其实之前的ajax代码只需要添加一个父评论id即可 点击回复按钮之后 我们应该获取到根评论对应的用户名和主键值
    针对主键值 多个函数都需要用 所以用全局变量的形式存储 针对子评论内容 需要切割出不是用户写的 @username\n
    // 获取用户评论的内容
    let conTent = $('#id_comment').val();
    // 判断当前评论是否是子评论 如果是 需要将我们之前手动渲染的@username去除
    if(parentId){
    // 找到\n对应的索引 然后利用切片 但是前片顾头不顾尾 所以索引+1
    let indexNum = conTent.indexOf('\n') + 1;
    conTent = conTent.slice(indexNum) // 将indexNum之前的所有数据切除 只保留后面的部分
    } 后端parent字段本来就可以为空,所以传不传值都可以直接存储数据 前端针对子评论再渲染评论楼的时候需要额外的判断
    {% if comment.parent_id %}
    <p>@{{ comment.parent.user.username }}</p>
    {% endif %}
    {{ comment.content }}
    前端parentId字段每次提交之后需要手动清空

今日内容概要

  • 后台管理

    文章查增 改删

    前端编辑器(kindeditor富文本编辑器)

    处理XSS攻击以及文章摘要的处理

  • 编辑器上传图片

  • 修改用户头像

  • bbs小总结

  • 后期建议(聊一聊)

今日内容详细

后台管理

"""
当一个文件夹下文件比较多的时候 你还可以继续创建文件夹分类处理
templates文件夹
backend文件夹
应用1文件夹
应用2文件夹
"""

添加文章

有两个需要注意的问题
1.文章的简介
不能直接切去
应该先想办法获取到当前页面的文本内容之后截取150个文本字符 2.XSS攻击
针对支持用户直接编写html代码的网址
针对用户直接书写的script标签 我们需要处理
1.注释标签内部的内容
2.直接将script删除 如何解决?
我们自己的话
针对1 后端通过正则表达式筛选
针对2 首先需要确定及获取script标签
这两步都好烦 有木有人来帮我一下
beautifulsoup模块 bs4模块
专门用来帮你处理html页面内的
该模块主要用于爬虫程序 下载千万不要下错了
pip3 install beautifulsoup4
# 模块使用
soup = BeautifulSoup(content,'html.parser') tags = soup.find_all()
# 获取所有的标签
for tag in tags:
# print(tag.name) # 获取页面所有的标签
# 针对script标签 直接删除
if tag.name == 'script':
# 删除标签
tag.decompose()
# 文章简介
# 1 先简单暴力的直接切去content 150个字符
# desc = content[0:150]
# 2 截取文本150个
desc = soup.text[0:150]
"""
当你发现一个数据处理起来不是很方便的时候
可以考虑百度搜搜有没有现成的模块帮你完成相应的功能
"""

kindeditor富文本编辑器

编辑器的种类有很多,你可以自己去网上搜索

编辑器上传图片

别人写好了接口 但是接口不是你自己的
你需要手动去修改 # 在使用别人的框架或者模块的时候 出现了问题不要慌 看看文档可能会有对应的处理方法

修改用户头像

@login_required
def set_avatar(request):
if request.method == 'POST':
file_obj = request.FILES.get('avatar')
# models.UserInfo.objects.filter(pk=request.user.pk).update(avatar=file_obj) # 不会再自动加avatar前缀
# 1.自己手动加前缀
# 2.换一种更新方式
user_obj = request.user
user_obj.avatar = file_obj
user_obj.save()
return redirect('/home/')
blog = request.user.blog
username = request.user.username
return render(request,'set_avatar.html',locals())

bbs项目总结

"""
在开发任意的web项目的时候 其实到了后期需要写的代码会越来越少
都是用已经写好的url填写到a标签href属性完成跳转即可
"""
主要功能总结
表设计 开发流程(粗燥流程 还可以细化)
注册功能
forms组件使用
头像动态展示
错误信息提示
登陆功能
图片验证码
滑动验证码
首页展示
media配置
主动暴露任意资源接口
个人站点展示
侧边栏展示
侧边栏筛选
侧边栏inclusion_tag
文章详情页
点赞点踩
评论
后台管理
"""
针对bbs需要你掌握每一个功能的书写思路 内部逻辑
之后再去敲代码熟悉 找感觉
"""

Django学习day15BBS项目开发4.0(完结)的更多相关文章

  1. Django学习day15BBS项目开发2.0

    每日测验 """ 今日日考 1.img标签src属性可以指代的值有哪些,各有什么特点 2.pillow模块是干什么用的,主要的方法有哪些 3.简述登陆功能图片验证码相关逻 ...

  2. Django学习day15BBS项目开发3.0

    每日测验 """ 今日考题 1.django admin作用及用法 2.media配置如何实现,基于该配置能够做到什么以及需要注意什么 3.阐述博客园为何支持用户自定义个 ...

  3. Django学习day14BBS项目开发1.0

    每日测验 """ 1.简述auth模块功能 2.简述项目开发流程 3.简述bbs表设计 """ 内容回顾 auth模块 "&quo ...

  4. Django实际站点项目开发经验谈

    开发了两个月的Django站点正式上线了,看着网站从无到有,从前端到后台,从本地开发到环境部署,一点一滴的堆砌成型,着实带给我不小的乐趣. Django站点介绍: 开发环境:阿里云服务器centos6 ...

  5. Anytime项目开发记录0

    Anytime,中文名:我很忙. 开发者:孤独的猫咪神. 这个项目会持续更新,直到我决定不再维护这个APP. 2014年3月10日:近日有事,暂时断更.希望可以会尽快完事. 2014年3月27日:很抱 ...

  6. Django SNS 微博项目开发

    1.功能需求 一个人可以follow很多人 一个用户如果发了新weibo会自动推送所有关注他的人 可以搜索.关注其它用户 可以分类关注 用户可以发weibo, 转发.收藏.@其它人 发微博时可选择公开 ...

  7. Django学习笔记 (一) 开发环境配置

    Django是一个开放源代码的Web应用框架,由Python写成. 采用了MVC的软件设计模式,即模型M,视图V和控制器C. 1. Python安装 下载地址: http://www.python.o ...

  8. python学习之-项目开发目录规范

    软件目录结构规范有什么好处: 通过规范化,能够更好的控制软件结构,让程序具有更高的可读性. 项目目录组织结构如下: Foo/ # 项目名 --bin/ # 可执行文件目录 --foo # 可执行程序 ...

  9. Django学习之项目结构优化

    其实就是采用包结构,比如: 目录models,包含__init__.py,a.py,b.py 然后将model class写在a和b中,但是这样的话,导入时就要改变了! from models imp ...

随机推荐

  1. WPF(MVVM) 利用资源字典实现中英文动态切换

    1.首先新建两个字典文件en-us.xaml.zh-cn.xaml.定义中英文的字符串在这里面. 2.将两个资源字典添加到App.xaml中,这里注意下,因为两个字典中有同样字符,如果没有动态更改,默 ...

  2. MySQL学习06(事务和索引)

    事务 概述 什么是事务 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 MySQL事务处理只支持InnoDB和BDB数据表类型 事务的ACI ...

  3. tomcat及springboot实现Filter、Servlet、Listener

    tomcat实现: 核心类org.apache.catalina.startup.ContextConfig //支持注解 see:org.apache.catalina.deploy.WebXml ...

  4. PTA数据结构习题集

    https://blog.csdn.net/qq_43733499/category_8956159.html https://www.cnblogs.com/nonlinearthink/tag/% ...

  5. Git(7)-- 查看提交历史(git log 命令详解)

    @ 目录 1.git clone 2.git log 3.git log -p 4.git log --stat 5.git log --pretty=oneline 6.git log --pret ...

  6. 【原创】冰蝎v3.0操作使用手册

    写在前面 近期冰蝎更新了内网穿透模块中的一些功能,有不少朋友不知道参数怎么填,希望能出一个使用指导手册,就借这个机会写一个"说明书"(文中有大量演示动图,请耐心等待加载). 基本信 ...

  7. DVWA(一):关于DVWA的基本介绍

    一.关于DVWA的搭建及报错问题: 传送门 上面链接主要解决安装DVWA报错的问题,这里防止自己再去找,所以记一下. (1)安装DVWA需要一个web环境,我实在win2003系统(xss_uploa ...

  8. MySQL自定义函数与存储过程的创建、使用、删除

    前言 日常开发中,可能会用到数据库的自定义函数/存储过程,本文记录MySQL对自定义函数与存储过程的创建.使用.删除的使用 通用语法 事实上,可以认为存储过程就是没有返回值的函数,创建/使用/删除都非 ...

  9. vue3 自己做一个轻量级状态管理,带跟踪功能,知道是谁改的,还能定位代码。

    上一篇 https://www.cnblogs.com/jyk/p/14706005.html 介绍了一个自己做的轻量级的状态管理,好多网友说,状态最重要的是跟踪功能,不能跟踪算啥状态管理? 因为vu ...

  10. 【springcloud】服务熔断与降级(Hystrix)

    转自:https://blog.csdn.net/pengjunlee/article/details/86688858 服务熔断 服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的 ...