根据班级模型设计简易朋友圈(支持发动态、点赞、评论、回复等)

需求

  将学校以班级为单位制作一个简易的朋友圈,默认用户在一个班级里,用户可以在朋友圈里发动态,支持9宫格,对动态进行评论,回复其他用户的评论,可删除自己的评论,对动态进行点赞,可取消自己的点赞等功能实现,这里的班级成员相当于朋友圈里的好友。

   需求整理如下:

  1. 班级圈里的用户均可以发布动态, 支持定位、图片等。
  2. 班级圈里的用户均可以查看、评论、删除自己的动态。
  3. 班级圈里的用户可以对动态进行互相点赞、评论、回复。
  4. 班级圈里的用户只能删除自己的动态、评论以及取消自己的点赞。

一、设计数据库

一共只需要三张表即可, 默认班级表(sys_clas)存在,用户表含有class_id:

  • friend_message: 朋友圈动态表。包含动态内容,动态发布所在的位置,9宫格图片,发布的时间。
  • friend_message_comments: 朋友圈评论表。包含 动态id、评论内容、用户id(是谁评论的), 回复用户id(给哪个用户回复,如果该字段为空,表示对该动态进行评论,如果有值,那么表示对该发布该动态的人进行回复)
  • sys_user: 系统用户表。

在这里插入图片描述
在设计动态表是,应该先了解一下什么是时间线。

什么是timeline?

在这里插入图片描述

   微博动态的设计有一个叫timeline的东西, 简单地说就是将好友或关注发送的动态归纳到一条属于本用户的时间线上, 用户通过刷新拉取上一次时间点到最新时间点的东西,前端只需要将获取到最新的数据追加到页面的最前面即可。

完整的sql:

/*Navicat Premium Data TransferSource Server         : local_mysqlSource Server Type    : MySQLSource Server Version : 50725Source Host           : localhost:3306Source Schema         : friend_shipTarget Server Type    : MySQLTarget Server Version : 50725File Encoding         : 65001Date: 12/04/2021 15:02:12
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for friend_message
-- ----------------------------
DROP TABLE IF EXISTS `friend_message`;
CREATE TABLE `friend_message`  (`id` int(11) NOT NULL AUTO_INCREMENT,`description` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`enabled` tinyint(1) NOT NULL,`create_datetime` datetime(6) NULL DEFAULT NULL,`update_datetime` datetime(6) NULL DEFAULT NULL,`delete_datetime` datetime(6) NULL DEFAULT NULL,`content` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '动态内容',`location` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '动态位置',`image` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '动态图片',`no_comment` tinyint(1) NOT NULL COMMENT '是否允许评论',`friend_class_id` int(11) NOT NULL COMMENT '班级id',`user_id` int(11) NOT NULL COMMENT '用户id',`time` bigint(20) NOT NULL COMMENT '时间线上的时间点',PRIMARY KEY (`id`) USING BTREE,INDEX `friend_message_friend_class_id_44f6ff0a_fk_school_class_id`(`friend_class_id`) USING BTREE,INDEX `friend_message_user_id_2e2d7a4f_fk_sys_user_id`(`user_id`) USING BTREE,CONSTRAINT `friend_message_user_id_2e2d7a4f_fk_sys_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of friend_message
-- ----------------------------
INSERT INTO `friend_message` VALUES (1, '1', 1, '2021-03-25 11:50:32.000000', '2021-03-25 13:46:54.967786', '2021-03-25 13:46:54.967786', '今天天气真不错', '上海浦东新区', '/resource', 0, 1, 1, 864426018297202);
INSERT INTO `friend_message` VALUES (2, '', 1, '2021-03-25 13:51:59.774310', '2021-03-25 13:51:59.774310', NULL, '今天真是一个好天气,适合出去玩', '上海浦东新区', '[]', 0, 1, 1, 864426018297202);
INSERT INTO `friend_message` VALUES (3, '', 1, '2021-03-25 13:55:27.396234', '2021-03-25 13:55:27.396234', NULL, '今天真是一个好天气,适合出去玩,我又发了一条动态', '我在北京天安门', '[]', 0, 1, 45, 864426018297202);
INSERT INTO `friend_message` VALUES (4, '', 1, '2021-03-25 14:12:36.385859', '2021-03-25 14:12:36.385859', NULL, '今天真是一个好天气,适合出去玩,我又发了一条动态', '我在天津', '[\"/resource/1\", \"/resource/2\"]', 0, 1, 45, 864426018297202);
INSERT INTO `friend_message` VALUES (5, '', 1, '2021-04-06 22:26:15.429701', '2021-04-06 23:38:42.103458', '2021-04-06 23:38:42.103449', '测试的', '', '[\"/20210406222609/523037/Screenshot_20210406-113207.png\"]', 0, 1, 45, 864426018297202);-- ----------------------------
-- Table structure for friend_message_comments
-- ----------------------------
DROP TABLE IF EXISTS `friend_message_comments`;
CREATE TABLE `friend_message_comments`  (`id` int(11) NOT NULL AUTO_INCREMENT,`description` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`enabled` tinyint(1) NOT NULL,`create_datetime` datetime(6) NULL DEFAULT NULL,`update_datetime` datetime(6) NULL DEFAULT NULL,`delete_datetime` datetime(6) NULL DEFAULT NULL,`content` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '评论内容',`message_id` int(11) NOT NULL COMMENT '动态id',`user_id` int(11) NOT NULL COMMENT '用户id',`reply_to_id` int(11) NULL DEFAULT NULL COMMENT '被回复的用户id',PRIMARY KEY (`id`) USING BTREE,INDEX `friend_message_comments_message_id_f9d21e99_fk_friend_message_id`(`message_id`) USING BTREE,INDEX `friend_message_comments_user_id_f9b2c710_fk_sys_user_id`(`user_id`) USING BTREE,INDEX `friend_message_comments_reply_to_id_dada096c_fk_sys_user_id`(`reply_to_id`) USING BTREE,CONSTRAINT `friend_message_comments_message_id_f9d21e99_fk_friend_message_id` FOREIGN KEY (`message_id`) REFERENCES `friend_message` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,CONSTRAINT `friend_message_comments_reply_to_id_dada096c_fk_sys_user_id` FOREIGN KEY (`reply_to_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,CONSTRAINT `friend_message_comments_user_id_f9b2c710_fk_sys_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user`  (`id` int(11) NOT NULL AUTO_INCREMENT,`description` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`enabled` tinyint(1) NOT NULL,`create_datetime` datetime(6) NULL DEFAULT NULL,`update_datetime` datetime(6) NULL DEFAULT NULL,`delete_datetime` datetime(6) NULL DEFAULT NULL,`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '昵称',`mail` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',`gender` int(11) NULL DEFAULT NULL COMMENT '性别',`age` int(11) NULL DEFAULT NULL COMMENT '年龄',`role` int(11) NOT NULL COMMENT '角色',`phone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '手机号',`pwd` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',`birthday` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生日',`class_id` int(11) NULL DEFAULT NULL COMMENT '班级id',`last_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '姓名',`card` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '身份证号',`head_image` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '头像',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `sys_user_phone_role_a0e25d98_uniq`(`phone`, `role`) USING BTREE,INDEX `phone_index`(`phone`) USING BTREE,INDEX `last_name_index`(`last_name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 46 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, NULL, 1, '2021-04-12 14:59:06.000000', '2021-04-12 14:59:07.000000', NULL, '张三', '123456@qq.com', 1, 23, 1, '158888888888', '123456', '2000-05-13', 1, '张三', '421182555555555', '/default');
INSERT INTO `sys_user` VALUES (45, NULL, 1, '2021-04-12 14:59:06.000000', '2021-04-12 14:59:07.000000', NULL, '李四', '123456@qq.com', 1, 23, 1, '15666666666', '123456', '2000-05-13', 1, '李四', '421182555555555', '/default');SET FOREIGN_KEY_CHECKS = 1;

二、动态功能实现

1. 发布动态

   发布动态的只需要注意2个问题。

  • 参数需要带上class_id。
  • 将发布的时间戳存入到 friend_message表里的time字段里。
    请求参数:
{"content": "今天真是一个好天气,适合出去玩,我又发了一条动态","location": "我在天津","images": ["/resource/1","/resource/2"]
}

2. 上拉获取更多动态

   上拉获取动态,可以通过设置一次拉取一定数量的数据来达到上拉获取更多动态,前端每次请求的数量通过分页实现, 例如每次请求的size为10条。
   假设当前用户为李四,李四发布了一条动态,通过接口获取后返回数据结构

{"code": 0,"message": "OK","data": [{"id": 4,"user": {"id": 7,"last_name": "李四","head_image": "/resource/123"},"friend_class": 2,"content": "今天真是一个好天气,适合出去玩,我又发了一条动态","location": "我在天津","image": ["/resource/resource/1","/resource/resource/2"],"no_comment": false,"create_datetime": "2021-03-25 14:12:36","is_own_message": true,"comments": [{"id": 1,"user": {"id": 45,"last_name": "李四"},"content": "我觉得今天天气很不错","reply_to": null,"is_own_comment": true},{"id": 2,"user": {"id": 1,"last_name": "张三"},"content": "回复 李四: 我也觉得今天天气不错","reply_to": 45,"is_own_comment": false}],"like": {"users": [{"id": 1,"last_name": "张三"},{"id": 45,"last_name": "李四"}],"is_own_like": false}}],"total": 1,"elapsed": 76
}

权限控制

  此处查询时添加了三个布尔值的字段 is_own_message, is_own_comment和 is_own_like, 值为true时,表示是自己发布的动态、评论的内容和点赞。通过此这三个字段我们可以实现前端页面上实现权限功能: 只能删除自己的动态、只能删除自己的评论、只能取消自己的点赞。

3. 下拉获取最新动态

   在每次下拉时,获取最新的班级圈的时间戳。根据班级id进行筛选,获取到max(tiime)。
   获取到最大的time, 例如 1618196528, 那么就可以根据该 1618196528 和 class_id去查询出比该时间戳大的动态。sql:

SELECT`friend_message`.`id`,`friend_message`.`description`,`friend_message`.`enabled`,`friend_message`.`create_datetime`,`friend_message`.`update_datetime`,`friend_message`.`delete_datetime`,`friend_message`.`user_id`,`friend_message`.`friend_class_id`,`friend_message`.`content`,`friend_message`.`location`,`friend_message`.`image`,`friend_message`.`no_comment`,`friend_message`.`time` 
FROM`friend_message` 
WHERE( `friend_message`.`delete_datetime` IS NULL AND `friend_message`.`friend_class_id` = 2 AND `friend_message`.`time` < 1618196527 ) 
ORDER BY`friend_message`.`time` DESC

三、点赞、评论、回复功能实现。

1. 点赞和取消点赞

   点赞和取消点赞可以说是非常容易实现的,我们可以借助redis来实现点赞和取消点赞。将动态id作为key,用户id作为value, 此文借助redis的集合来进行存取。
   前端需根据is_own_like判断只有当前用户才能够取消点赞。

conn = redis_util.get_redis_connection()# 点赞
conn.sadd("friend_message:" + str(dynamic_id), user_id)# 取消点赞
conn.srem("friend_message:" + str(dynamic_id), user_id)
#  获取点赞数conn.sinter("friend_message:" + str(dynamic_id))

2. 评论和回复

添加: 回复的时候在参数里带一个 reply_to_id即可。

  def post(self, request, dynamic_id=None):r = Result()try:user_id = self.auth(request)content = request.data["content"]message = FriendMessage.objects.filter(id=dynamic_id).first()if not message:raise Exception("动态已删除!")if len(content) == 0:raise Exception("请输入内容!")user = SysUser.objects.filter(id=user_id).first()if "reply_to_id" in request.data:# 回复某个用户reply_to_id = request.data["reply_to_id"]replay_to = SysUser.objects.filter(id=reply_to_id).first()FriendComment.objects.create(message=message, user=user, content=content, reply_to=replay_to)else:FriendComment.objects.create(message=message, user=user, content=content)except Exception as e:r.error(e)return self.s_result(r)

查看:
   由于朋友圈里的评论和回复没有设置分级,即评论和回复的显示都是平级,因此在查询评论和回复的时候,不需要设置父子关系,因此在设计评论表的时候,给一个reply_to_id就能够区分comments表里的记录是评论还是回复。
在这里插入图片描述
查看评论和回复代码查看:

  def get_comments(dynamic_id, user_id):comments = FriendComment.objects.filter(message__id=dynamic_id).order_by("create_datetime").values("id", "user__id", "user__last_name", "content", "reply_to__id", "reply_to__last_name")data = []for x in comments:comment = {"id": x["id"],"user": {"id": x["user__id"],"last_name": x["user__last_name"]},"content": " 回复 " + x["reply_to__last_name"] + ": " + x["content"] if x["reply_to__last_name"] else "" + x["content"],"reply_to": x["reply_to__id"],"is_own_comment": True if x["user__id"] == int(user_id) else False}# find_reply_to(dynamic_id, comment, user_id)data.append(comment)return data

  如果有不懂的朋友,可以私聊,吐血总结,喜欢的支持一下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/69703.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕业论文用什么流程图软件比较好?

在写作论文的时候使用流程图&#xff0c;会让我们的论文看起来更加有逻辑。并且流程图的图片都可以在PPT中随意插入以及使用。 基础流程图作为最为基本和简单的的流程图方式&#xff0c;一般不区分用户角色和场景&#xff0c;适用于简单场景&#xff0c;梳理单一的流程情况&am…

AI真的会抢“饭碗” ?

去年年底ChatGPT横空出世&#xff0c;并在全球掀起AI热潮&#xff0c;全世界的科技公司都在这场人工智能竞赛中迎头追赶。不过AI强大的能力&#xff0c;也让广大职场人担心&#xff0c;“AI取代人类劳动力”也随之成为热议话题。 事实上&#xff0c;AI创作会不会真的抢人类的“…

AI未来会取代哪些行业

AI的全称Artificial Intelligence, 人工智能&#xff0c;合起来就是人工智能。 它的目的是模仿人类智能&#xff0c;使电脑能够实现一些人类难以完成的任务&#xff0c;比如自动学习、自动推理和自动解决问题。 虽然AI和人工制造的实体&#xff0c;如机器人等&#xff0c;都可…

李德毅院士 :智能的困扰和释放

来源&#xff1a;中国人工智能学会 李德毅, 何雯 *军事科学院系统工程研究院&#xff0c;北京&#xff0c;100141 *通信作者. E-mail: colcloud126.com 摘要&#xff1a;智能回答整个认知活动中“在哪里”、“是什么”、“为什么”和“怎么做”四个基本问题&#xff0c;含有丰富…

综述 | 从第一性原理出发,探索类脑智能研究的星辰大海

导读 近几年来&#xff0c;以大模型为代表的人工智能技术正在引领下一个产业发展的浪潮。目前&#xff0c;以ChatGPT、AlphaFold为代表的人工智能在文图生成、自然语言处理、蛋白质结构模拟等方面取得的突破性进展正在为这个行业带来不断的惊喜以及似乎无限的想象空间。然而&am…

管理类联考——英语——知识篇——作文题材说明

小作文题材 一、题材&#xff1a;小作文的内容&#xff08;写什么&#xff09; 1.疫情相关的主题&#xff1a;&#xff08;以信件方式出题可能性60%&#xff0c;对生活影响大&#xff09; (1)停学、复学&#xff1a;线上或线下停学和复学( go back to class/ school )&#x…

大佬回避!一名老程序猿送给在校大学生的话:关于恋爱、关于兼职和实习、关于师生和成长、关于工作和职场……

大学应当是人生中最快乐的时光。 在这些日子里&#xff0c;你可以做很多事情&#xff0c;有些事情甚至会影响你的一生…… 本文是我作为一个过来人的一些思考。 提笔缘故 可能是上了年纪的缘故&#xff0c;一旦有学弟学妹和我聊起大学或者工作是&#xff0c;我都会无数鸡汤犹如…

刚毕业的欧洲大学生,就能拿到美国互联网大厂 Offer?

作者 | Ludovico 译者 | 弯月 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 我是一名刚刚毕业的欧洲研究生&#xff0c;我将通过本文分享个人找工作的经历。 有人可能会说美国有很多机遇&#xff0c;别的国家也一样吗&#xff1f;高科技市场对技术人员供不…

某985学历程序员嫌弃女朋友高职毕业学历低,但女朋友实在太漂亮,好犹豫!...

????????关注后回复 “进群” &#xff0c;拉你进程序员交流群???????? 作者丨行走的印钞机 来源丨程序员八卦 都说程序员小哥哥找对象的标准就是漂亮&#xff0c;但人的欲望是无穷的&#xff0c;有了漂亮女朋友又想要更多&#xff0c;比如高学历、家境好、工作…

AAAI 2021 | 自动写歌:基于预训练和对齐约束的自动歌曲创作

©作者 | 盛中昊 学校 | 北京大学硕士 研究方向 | 自然语言处理 本工作由北京大学 KCL 实验室与南京理工大学、微软亚洲研究院、浙江大学共同提出。KCL&#xff08;Knowledge Computing Lab&#xff0c;知识计算实验室&#xff09;是北大软件工程国家工程研究中心一支 20 多…

快讯|科大讯飞:将发布讯飞星火认知大模型 V1.5;OpenAI CEO 称公司没有上市计划

一分钟速览新闻点 百度智能云推出代码助手 Comate&#xff0c;覆盖 30 开发语言科大讯飞&#xff1a;将发布讯飞星火认知大模型 V1.5新型量子计算机“悟空”即将发布OpenAI CEO 称公司没有上市计划特斯拉自动驾驶将开放给其他车企&#xff0c;马斯克称自动驾驶的 ChatGPT 时刻…

聚观早报 | 百度回应文心「造假」;TikTok CEO 出席美国会听证会

今日要闻&#xff1a;百度回应文心「造假」&#xff1b;TikTok CEO 出席美国会听证会&#xff1b;华为发布P60、Mate X3两款手机&#xff1b;2023胡润全球富豪榜公布&#xff1b;ARM 已通知客户将改变授权模式 百度回应文心「造假」 3 月 23 日消息&#xff0c;百度今日针对文…

chatgpt赋能python:Python做描述性统计:统计分析从未如此轻松

Python做描述性统计&#xff1a;统计分析从未如此轻松 Python是一种高级编程语言&#xff0c;广泛应用于数据科学、人工智能、Web开发和许多其他领域。Python非常适合数据分析和统计学&#xff0c;其中包括描述性统计&#xff0c;这是一种报告和总结数据集的方法。 什么是描述…

我去阿里的故事

背景介绍 本人19年毕业生&#xff0c;硕士华中科技大学&#xff0c;本科南昌航空大学&#xff0c;目前在阿里巴巴企业智能事业部从事Java开发。 故事从这里说起 应该差不多在大三上学期的时候吧&#xff0c;我的一位学长在我的一堂职业规划课上和大家分享他是如何复习考上了…

阿里中台(看图不说话)

阿里中台战略&#xff0c;源于阿里高管15年中参观世位于芬兰界上最成功的移动游戏公司Supercell。Supercell的核心竞争力就在多年的游戏研发中积累了非常科学的研发方法和体系&#xff0c;包括游戏开发过程中公共、通用的游戏开发素材、算法做了很好的沉淀&#xff0c;形成了强…

培训班出身的同学简历怎么做?面试要注意哪些?来自资深大厂HR的忠告

目录 1 不少培训班候选人的简历中&#xff0c;缺乏足够的商业项目年限 2 直接描述培训班学习经历会带来的负面影响 3 大龄转行Vs年轻的初级程序员&#xff0c;公司一般会如何选择&#xff1f; 4 经过培训班突击后&#xff0c;可以先面试小公司 5 面试官怎么面试有培训班经历…

辅导员面试时的自我介绍要如何准备

辅导员作为一名需要管理学生思想政治教育、日常管理、心理健康等方面的老师&#xff0c;需要面试者拥有较强的综合素质&#xff0c;因此&#xff0c;面试官在面试该岗位应聘者时会有较高的要求。而在一场辅导员面试中&#xff0c;最能表现自己能力的和给面试官留下深刻印象的就…

小红书 算法简介

小红书作为中国乃至全球独一无二的社区电商&#xff0c;目标是让全世界的好生活触手可及&#xff0c;那么如何帮助用户在社区里发现好生活&#xff0c;又如何引导用户找到值得剁手的好产品呢&#xff1f;本文整理自 ArchSummit 深圳演讲&#xff0c;探讨如何运用机器学习和人工…

帝搜软件新功能发布:知乎关键词seo排名优化上线

知乎文章的seo优化功能确定在10月15日上线 目前已经通过大量数据测试&#xff0c;验证效果是非常强劲的&#xff01;也进行了部分热门词、竞争词的压力测试 关于知乎排名优化的总结&#xff1a; 1、支持范围 支持原始排名前200名以内的文章、视频等&#xff0c;知乎优化主要是文…

百度SEO站长统计后台广告推送引流软件

简介&#xff1a; 网站统计广告推送引流软件是一款非常专业的网站引流软件&#xff0c;能够帮助用户伪造站长统计的搜索关键词&#xff0c;支持自定义刷词次数、多线程支持自定义线程数&#xff0c;能够自动导出网站&#xff0c;成功的网址统计代码直接保存&#xff0c;方便下…