首页 > 其他分享 >BBS项目(三):侧边栏筛选功能 文章详情页搭建 点赞点踩功能 文章根评论功能

BBS项目(三):侧边栏筛选功能 文章详情页搭建 点赞点踩功能 文章根评论功能

时间:2023-01-05 15:11:54浏览次数:46  
标签:功能 点赞点 侧边 站点 tag 文章 筛选 路由

目录

复习与补充

admin后台管理复习:

admin.py文件中注册模型表 然后访问admin路由使用超级管理员登录

admin.site.register(models.UserInfo)
"""
1.后台可以不填写某字段
blank=True	

2.后台显示表名
class Meta:
	verbose_name_plural = '' 
"""
ps:绑定关系要细心

功能补充:

1. 用户注册之后自动生成站点
	之前我们用户注册之后,站点和用户之间的关系没有绑定。可以在用户注册时,输入有关站点的信息,注册完成之后,直接录入站点表,自动生成个人站点

2. 个人站点名字扩展 
	之前我们的站点名字 和 站点路由名是相同的,应该支持用户自定义站点名。

侧边栏筛选功能

1.先研究博客园三种情况下的筛选特性
	分类筛选路由特性:   站点名称/category/数据主键值
	标签筛选路由特性:	站点名称/tag/数据主键值
 	日期筛选路由特性:	站点名称/archive/文章年月
2.研究路由开设接口
	多个路由使用相同的视图函数 因为个人站点的文章和侧边栏筛选的文章互为父子集
    # 侧边栏筛选接口
    # path('<str:username>/category/<int:category_id>/', views.site_func),
    # path('<str:username>/tag/<int:tag_id>/', views.site_func),
    # path('<str:username>/archive/<str:yearAndmonth>/', views.site_func),
    # 上述三个路由可以合并成一个路由
    re_path('^(?P<username>\w+)/(?P<condition>category|tag|archive)/(?P<params>.*?)/', views.site_func)
  
   由于以上路由传递的实参个数不相同,所以在视图函数我们可以使用可变长形参接受:
   # def site_func(request,username,**kwargs):

3.由于筛选还是基于个人站点 所以多个路由使用相同的视图函数
	通过视图函数接收的实参个数不同从而区分不同的业务逻辑
4.侧边栏筛选后端逻辑
	个人站点页主体部分:
        正常情况下:个人站点应该展示所有文章
        经过侧边栏筛选: 展示被筛选的部分文章
    个人站点侧边栏部分:
		侧边栏的分类、标签、日期依旧是根据该用户的所有文章生成的,与侧边栏筛选之后的结果无关。
5.根据条件二次过滤文章数据
	正反向查询、神奇的双下划线查询

文章详情页搭建

1.路由的设计
	站点名称/article/数据主键值
	开设新路由
2.侧边栏制作inclusion_tag
	对于侧边栏这局部的html代码要在好几个页面使用,并且这个html中用到的数据是动态渲染的。
	所以要使用inclusion_tag来进行实现。也可以在视图函数重新写orm,但是重复的代码太多,不建议这么做。
    2.1侧边栏很多页面都需要使用 并且还需要传参才可以加载出来
	2.2干脆制作成inclusion_tag调用 从而节省代码
	2.3自定义操作固定步骤(模板层相关知识)
3.文章详情页后端逻辑
	开设新路由 ---> 筛选用户写的文章(查询1篇)  ---> 前端模板继承 ---> 侧边栏数据丢失 ---> 使用inclusion_tag ---> 获取外部文章html代码 ---> safe信任html代码

点赞点踩样式搭建

1.数据准备
	直接拷贝博客园样式即可 主要除了html还有css 遇到图片防盗链问题,就将图片下载到本地
2.针对路由匹配
	含有动态匹配的路由很多时候可能会出现顶替的情况
	这个时候我们可以将简单的路由放前面 复杂的放后面 甚至修改匹配策略

点赞点踩功能完善

1.前端页面给点赞点踩图标绑定点击事件
	通过标签class值的不同区分是赞还是踩
	发送ajax请求携带文章主键值、点赞点踩...
2.后端业务逻辑
	校验用户是否登录、校验当前用户是否是文章作者、校验当前用户是否已经点过、完成数据库操作(注意普通字段数据更新)
	ps:注意前端发送过来的js类型的布尔值需要自己处理成python布尔值
3.前端展示优化
	信息提示、数字动态变化
	ps:针对标签文本需要做类型转换 否则默认是字符串拼接

文章评论前期准备

1.前端样式搭建
	最简易的几个标签
	获取用户输入的textarea以及一个提交按钮
2.评论逻辑
	先考虑根评论 之后再考虑子评论 不要乱!!!
3.根评论
	点击提交评论按钮 发送ajax请求 携带必要的参数即可

文章根评论业务逻辑

1.给提交按钮绑定点击事件
2.发送ajax请求
	携带评论内容、文章主键
3.后端直接获取数据并写入数据库
	还是得注意文章表中的普通字段
ps:很多业务逻辑可能需要执行多条ORM语句 这个时候为了保证数据的完整可以采用事务操作(回想ORM事务的三种操作方式)

练习

1.整理今日内容及思路
2.连续功能编写
	先理清逻辑再动手
ps:编写功能可以先一条道走到黑之后再考虑其他情况

标签:功能,点赞点,侧边,站点,tag,文章,筛选,路由
From: https://www.cnblogs.com/passion2021/p/17027607.html

相关文章

  • 文章评论业务完善、 后台管理 、添加文章
    目录文章评论业务完善后台管理添加文章文章评论业务完善提交评论 评论框里面的内容会清空然后页面会有一个临时评论样式出现页面刷新才会出现评论楼样式研究子评论......
  • Unity小地图Minimap制作全面功能介绍篇
    本系列文章将讲述如何制作小地图。功能如下:  小地图的局部放大地图,缩小功能。小地图展开成为大地图,以及与大地图的互相切换  大地图的人物图标跟随角色旋转和移动 ......
  • C#应用程序配置文件(XML序列化) - 开源研究系列文章
    上次写了一个C#线程池及管理器的博文(C#开发的线程池和管理器-开源研究系列文章),收到了不小的浏览量,在此感谢各位网友的支持。这次将另一个功能放出来单独讲解:C#应用......
  • Unity游戏副本地图点击图标移动功能
    本篇讲相同的功能即:点击地图中的一个位置,让图标瞬间移动到点击位置,同时3D场景中人物也可以抵达场景中对应的点击位置。如图:操作方法和之前一样:找到大地图的渲染的Rawimage。......
  • Unity之NetworkView聊天室功能
    NetworkView是Unity封装的一套快速实现多人联机游戏的功能。以此为基础,我们可以开发各种类型的多人游戏,可以开发过关游戏的双人联机,也可以开发类似于CS的射击游戏,以房间为单......
  • UGUI动态生成列表功能实现(增删保存)
    在UGUI里不免会有一些列表需要生成和显示。例如最简单的增、删、改、查等都需要列表的变化。本文只讲增、删、保存、清空UGUI配合的变化方法。下面以实现场景里角色的实时......
  • Unity制作聊天室功能
    用untiy作客户端、用VS的控制台程序来做服务器。首先是服务器端的代码,分两个类一个Program,一个ForClient类。分别如下:usingSystem.Net.Sockets;usingSystem.Collections.......
  • 噩梦系列篇之Player受伤功能及伤害效果
    下面设定player的受伤数值变化及伤害效果显示;添加一个Health脚本。。。下面看脚本的内容;让我们再次Coding起来;usingUnityEngine;usingSystem.Collections;publicclasshe......
  • Unity计时器功能
    在程序开发中很多地方会用到计时器进行倒计时的功能。下面我就写一个非常实用的倒计时功能。首先在场景中建一个Text用来显示倒计时的数值,然后给它加上倒计时的脚本Timer。......
  • 噩梦系列篇之敌人自动追击Player功能(NavMeshAgent)
    敌人自动追击功能用到NavMeshAgent制作NavMeshAgent:首先选择地图,保持地图为static状态;之后就是选择window里面的Navigation如下图:然后点击Bake后得到如下图;蓝色地图区域就......