BBS项目 day05 后台系统功能(首页、文章列表展示、添加文章、上传文件(uuid生成新的文件名))

一、后台功能的初始配置

1. urls.py路由分发

    re_path('app02/', include('app02.urls')),

2.app02/urls.py

from django.urls import path, re_path, include
from app02 import viewsurlpatterns = [path('home/', views.home),path('article_list/', views.article_list),path('add_article/', views.add_article),path('upload_image/', views.upload_image),
]

二、后台功能之首页

1.首页前端

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>{% load static %}<script src="{% static 'js/jquery.min.js' %}"></script><link href="{% static 'bootstrap/css/bootstrap.min.css' %}" rel="stylesheet"><script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script><script src="{% static 'layer/layer.js' %}"></script></head>
<body>{# 导航条开始 #}
<nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse"data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="#">BBS博客园后台系统</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="#">文章 <span class="sr-only">(current)</span></a></li><li><a href="#">分类</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"aria-expanded="false">点我看更多美女哦 <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="Search"></div><button type="submit" class="btn btn-default">搜索</button></form><ul class="nav navbar-nav navbar-right">{% if request.session.username %}<li style="line-height: 50px;"><!-- /media/{ article.blog.userinfo.avatar }} -->{# <img class="media-object" src="/media/{{ article.blog.userinfo.avatar }}" style="width: 100px;" alt="..."> #}<img src="/media/{{ cur_avatar }}" style="width: 50px; height: 36px;" class="onImg" alt=""></li><li><a href="#">{{ request.session.username }}</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"aria-expanded="false">更多操作 <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#" data-toggle="modal" data-target=".bs-example-modal-lg">修改密码</a></li><li><a href="#">更改头像</a></li><li><a href="/logout/">退出登录</a></li><li><a href="#">后台管理</a></li></ul></li>{% else %}<li><a href="/login/">登录</a></li><li><a href="/register/">注册</a></li>{% endif %}</ul><!-- 模态框 --><div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="row"><h1 class="text-center">修改密码</h1><div class="col-md-8 col-md-offset-2"><div class="form-group">用户名:<input type="text" readonly value="{{ request.session.username }}"class="form-control"></div><div class="form-group">原密码:<input type="password" id="old_password" class="form-control" msg="原密码必须输入"></div><div class="form-group">新密码:<input type="password" id="new_password" class="form-control" msg="原密码必须输入"></div><div class="form-group">确认密码:<input type="password" id="re_password" class="form-control" msg="原密码必须输入"></div><div class="form-group"><input type="button" value="修改密码" class="btn btn-primary btn-block btn_password"></div></div></div></div></div></div></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav>
{# 导航条结束 #}<div class="container-fluid"><div class="row"><div class="col-md-3"><div class="list-group"><a href="#" class="list-group-item active">首页</a><a href="/app02/article_list/" class="list-group-item">文章列表</a><a href="#" class="list-group-item">分类类别</a><a href="#" class="list-group-item">标签列表</a><a href="#" class="list-group-item">更多</a></div></div><div class="col-md-9"><div class="panel panel-info"><div class="panel-heading">我自一口真气足</div><div class="panel-body">{% block content %}<div class="jumbotron"><h1>最牛叉的博客平台</h1><p>无招胜有招</p><p><a class="btn btn-primary btn-lg" href="#" role="button">更过风景</a></p></div><div class="row"><div class="col-sm-6 col-md-4"><div class="thumbnail"><img src="https://img2.baidu.com/it/u=3323311628,2330835932&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1692464400&t=3cf590e7ea88465e48ef5170f7c70884"alt="..."><div class="caption"><h3>Thumbnail label</h3><p>清风拂山岗</p><p><a href="#" class="btn btn-primary" role="button">Button</a> <a href="#"class="btn btn-default"role="button">如来神掌</a></p></div></div></div><div class="col-sm-6 col-md-4"><div class="thumbnail"><img src="https://img2.baidu.com/it/u=3323311628,2330835932&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1692464400&t=3cf590e7ea88465e48ef5170f7c70884"alt="..."><div class="caption"><h3>Thumbnail label</h3><p>清风拂山岗</p><p><a href="#" class="btn btn-primary" role="button">Button</a> <a href="#"class="btn btn-default"role="button">如来神掌</a></p></div></div></div><div class="col-sm-6 col-md-4"><div class="thumbnail"><img src="https://img2.baidu.com/it/u=3323311628,2330835932&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1692464400&t=3cf590e7ea88465e48ef5170f7c70884"alt="..."><div class="caption"><h3>Thumbnail label</h3><p>清风拂山岗</p><p><a href="#" class="btn btn-primary" role="button">Button</a> <a href="#"class="btn btn-default"role="button">如来神掌</a></p></div></div></div></div>{% endblock %}</div></div></div></div>
</div>{% block js %}{% endblock %}</body>
</html>

2.首页后端

def home(request):return render(request, 'backend/home.html', locals())

三、后台功能之文章列表展示

1.文章列表展示前端

{% extends 'backend/home.html' %}{% block content %}<h2 class="text-center">文章列表</h2><form action=""><div class="form-group">文章标题<input type="text" id="title" class="form-control"></div><div class="form-group">文章分类<select name="" id="cate" class="form-control">{% for cate in cate_list %}<option value="{{ cate.pk }}">{{ cate.name }}</option>{% endfor %}</select></div><div class="form-group"><p>文章标签</p>{% for tags in tags_list %}{{ tags.name }}&nbsp;<input type="checkbox" value="{{ tags.pk }}" name="tags">&nbsp;&nbsp;{% endfor %}</div><div class="form-group">文章内容<textarea id="editor_id" name="content" style="width:100%;height:300px;"></textarea></div><div class="form-group"><input type="button" id="title" value="提交" class="btn btn-success btn-block btn_article"></div></form>{% endblock %}{% block js %}<script charset="utf-8" src="/static/kindeditor/kindeditor-all.js"></script><script charset="utf-8" src="/static/kindeditor/lang/zh-CN.js"></script><script>KindEditor.ready(function (K) {window.editor = K.create('#editor_id', {height: '500px',items: ['source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste','plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright','justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript','superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/','formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold','italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'multiimage','flash', 'media', 'insertfile', 'table', 'hr', 'emoticons', 'baidumap', 'pagebreak','anchor', 'link', 'unlink', '|', 'about'],colorTable: [['#E53333', '#E56600', '#FF9900', '#64451D', '#DFC5A4', '#FFE500'],['#009900', '#006600', '#99BB00', '#B8D100', '#60D978', '#00D5FF'],['#337FE5', '#003399', '#4C33E5', '#9933E5', '#CC33E5', '#EE33EE'],['#FFFFFF', '#CCCCCC', '#999999', '#666666', '#333333', '#000000']],resizeType: 0, // 0,1,2uploadJson : '/app02/upload_image/',extraFileUploadParams : {csrfmiddlewaretoken: '{{ csrf_token }}'},});});$(".btn_article").click(function () {// 接收参数// 标题let title = $("#title").val();//分类let cate_id = $("#cate").val();// 标签:由于是复选框,所以有可能有多个值的情况,需用循环取值// 定义一个数组,用于接收tags的值tags_arr = []var tags = $("input[name='tags']:checked");$.each(tags, function (index, value) {console.log(index, $(this).val());// 将复选框的值放入数组中tags_arr.push($(this).val());});console.log(tags_arr); // [3, 4]// 注意:由于这里的值是数组,在后端获取不到,需要转为字符串才能传给后端获取// 数组转字符串 joinvar tags_str = tags_arr.join(',')  // 3, 4console.log(tags_str);// 内容// 同步数据后可以直接取得textarea的valueeditor.sync();content = $('#editor_id').val(); // jQueryconsole.log(content)// 发起Ajax请求$.ajax({url: '',type: 'post',data: {title: title,cate_id: cate_id,tags: tags_str,content: content,csrfmiddlewaretoken: '{{ csrf_token }}',},success: function (res) {if (res.code === 200) {layer.msg(res.msg, {} ,function () {location.href = '/app02/article_list/'});} else {layer.msg(res.msg, {});}}});});</script>
{% endblock %}

2.文章列表后端

def article_list(request):# 查询出所有的文章列表articles_list = models.Article.objects.all()return render(request, 'backend/article_list.html', locals())

三、后台功能之添加文章

1.添加文章前端

{% extends 'backend/home.html' %}{% block content %}<h3 class="text-center">添加文章</h3><form action=""><div class="form-group">文章标题:<input type="text" id="title" class="form-control"></div><div class="form-group">文章分类:<select name="" id="cate" class="form-control">{% for category in category_list %}<option value="{{ category.pk }}">{{ category.name }}</option>{% endfor %}</select></div><div class="form-group"><p>文章标签:</p>{% for tags in tags_list %}{{ tags.name }}&nbsp;<input type="checkbox" id="title" name="tags" value="{{ tags.pk }}" style="margin-right: 10px;">{% endfor %}</div><div class="form-group">文章内容:<textarea id="editor_id" name="content" style="width:100%;height:400px;"></textarea></div><div class="form-group"><!-- type="submit" 会自动提交表单 --><!-- <button></button> 会自动提交表单,注意:当写在外面的时候才不会自动提交form表单 -->{# <input type="submit" value="提交" id="title" class="btn btn-success btn-block"> #}<!-- type="button" 不会自动提交表单 --><input type="button" value="提交" id="title" class="btn btn-success btn-block btn_article"></div></form>{% endblock %}

2.添加文章后端

def add_article(request):# 文本编辑器官网 http://www.kindsoft.net/down.phpuser_obj = models.UserInfo.objects.filter(pk=request.session.get('id')).first()if not user_obj:return redirect('/login/')blog = user_obj.blog# 查询所有的分类category_list = models.Category.objects.all()# 查询所有的标签列表tags_list = models.Tag.objects.all()back_dict = {'code': 200, 'msg': '添加成功', 'data': []}# 1.获取前段传递过来的数据if request.method == 'POST':title = request.POST.get('title')cate_id = request.POST.get('cate_id')content = request.POST.get('content')tags = request.POST.get('tags')  # 1, 2# tags原本是一个列表,但是前端传值时进行了转换,有列表转为了字符串# 在此,要先转位列表去使用tags_list = tags.split(',')  # [1, 2]# 2.参数验证if not title:back_dict['code'] = 1500back_dict['msg'] = '标题必须有'return JsonResponse(back_dict)if not cate_id:back_dict['code'] = 1501back_dict['msg'] = '分类必须选择'return JsonResponse(back_dict)if not tags:back_dict['code'] = 1502back_dict['msg'] = '标签必须选择'return JsonResponse(back_dict)if not content:back_dict['code'] = 1503back_dict['msg'] = '内容不能为空'return JsonResponse(back_dict)'''1.摘要截取的问题2.xss攻击的问题----->原理:有了script标签------>把提交过来的内容过滤出script标签,然后做删除解决方法:1.使用正则匹配 script,匹配到之后,做删除,这个方法很麻烦,不推荐2.利用第三方模块来处理:bs4模块pip install bs4BeautifulSoup它是用在爬虫里面,它能够筛选数据,清晰html数据BeautifulSoup('', 'html.parser')使用lxml的话需要安装 pip install lxmlBeautifulSoup('', 'lxml')'''# 解决xss攻击的问题from bs4 import BeautifulSoupsoup = BeautifulSoup(content, 'html.parser')# print(soup.find_all('a'))  # 写的a那么久就筛选a# print(soup.find_all('script'))# print(soup.text)  # 打印文本内容for tag in soup.find_all():# print(tag.name)if tag.name == 'script':# 删除scripttag.decompose()# 文章摘要直接从内容中截取 100字desc = soup.text[:100]# 3.数据入库,需要操作文章表,文章、标签的第三张表article_obj = models.Article.objects.create(title=title, content=str(soup), desc=desc, category_id=cate_id,blog=blog)# 操作标签的第三张表,数据是多对多,选择批量插入数据article_tag_list = []for i in tags_list:article_tag_obj = models.Article2Tag(article_id=article_obj.pk, tag_id=i)article_tag_list.append(article_tag_obj)models.Article2Tag.objects.bulk_create(article_tag_list)return JsonResponse(back_dict)return render(request, 'backend/add_article.html', locals())

四、后台功能之上传文件

1.添加文章前端

{% extends 'backend/home.html' %}{% block content %}<h3 class="text-center">添加文章</h3><form action=""><div class="form-group">文章标题:<input type="text" id="title" class="form-control"></div><div class="form-group">文章分类:<select name="" id="cate" class="form-control">{% for category in category_list %}<option value="{{ category.pk }}">{{ category.name }}</option>{% endfor %}</select></div><div class="form-group"><p>文章标签:</p>{% for tags in tags_list %}{{ tags.name }}&nbsp;<input type="checkbox" id="title" name="tags" value="{{ tags.pk }}" style="margin-right: 10px;">{% endfor %}</div><div class="form-group">文章内容:<textarea id="editor_id" name="content" style="width:100%;height:400px;"></textarea></div><div class="form-group"><!-- type="submit" 会自动提交表单 --><!-- <button></button> 会自动提交表单,注意:当写在外面的时候才不会自动提交form表单 -->{# <input type="submit" value="提交" id="title" class="btn btn-success btn-block"> #}<!-- type="button" 不会自动提交表单 --><input type="button" value="提交" id="title" class="btn btn-success btn-block btn_article"></div></form>{% endblock %}{% block js %}{% load static %}<script charset="utf-8" src="{% static 'kindeditor/kindeditor-all.js' %}"></script><script charset="utf-8" src="{% static 'kindeditor/lang/zh-CN.js' %}"></script><script>KindEditor.ready(function (K) {window.editor = K.create('#editor_id', {height: '300px',items: ['source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste','plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright','justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript','superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/','formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold','italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'multiimage','flash', 'media', 'insertfile', 'table', 'hr', 'emoticons', 'baidumap', 'pagebreak','anchor', 'link', 'unlink', '|', 'about'],resizeType: 0,colorTable: [['#E53333', '#E56600', '#FF9900', '#64451D', '#DFC5A4', '#FFE500'],['#009900', '#006600', '#99BB00', '#B8D100', '#60D978', '#00D5FF'],['#337FE5', '#003399', '#4C33E5', '#9933E5', '#CC33E5', '#EE33EE'],['#FFFFFF', '#CCCCCC', '#999999', '#666666', '#333333', '#000000'],],uploadJson: '/upload_image/',extraFileUploadParams: {csrfmiddlewaretoken: '{{ csrf_token }}'},});});// 绑定点击事件$(".btn_article").click(function () {// 同步数据后可以直接取得textarea的valueeditor.sync();// 获取数据// 标题let title = $("#title").val();// 分类let cate = $("#cate").val();// 文章标签是复选框,所以通过属性选择器获取值,// 由于是复选框的缘故,可能会有多个值的情况出现,所以应该循环取值// 注意:获取复选框时,不要加上 .val(),循环取值的再加上let tags = $("input[name='tags']:checkbox");let tags_arr = []$.each(tags, function (index, value) {tags_arr.push($(this).val());});console.log(tags_arr); // [1,2,3,4]// 由于是数组,所以传递到后台的数据不是字符串,要先转为字符串// 在下面的Ajax的 data 中传值也要传递字符串var tags_str = tags_arr.join(',');console.log(tags_str);// 内容{#html = document.getElementById('editor_id').value; // 原生API#}{#html = K('#editor_id').val(); // KindEditor Node API#}let content = $("#editor_id").val(); // jQueryconsole.log(content);// 发起Ajax请求$.ajax({url: '',type: 'post',data: {title: title,cate: cate,tags: tags_str,content: content,csrfmiddlewaretoken: '{{ csrf_token }}'},success: function (res) {if (code === 200) {layer.msg(res.msg, {}, function () {location.href = '/app02/article_list/';});} else {layer.msg(res.msg, {});}}});});</script>
{% endblock %}

2.添加文章后端

# 上传图片
def upload_image(request):'''返回格式:josn//成功时{"error" : 0,"url" : "http://www.example.com/path/to/file.ext"}//失败时{"error" : 1,"message" : "错误信息"}'''# 方式1:if request.method == 'POST':file_obj = request.FILES.get('imgFile')# print(file_obj)  # <MultiValueDict: {'imgFile': [<InMemoryUploadedFile: 7.jpg (image/jpeg)>]}># 拼接上传文件的路径import osfrom django.conf import settings# /media/article_img/xx.123.pngBASE_DIE = os.path.join(settings.BASE_DIR, 'media', 'article_img')file_name = os.path.join(BASE_DIE, file_obj.name)with open(file_name, 'wb') as f:for line in file_obj:f.write(line)# return HttpResponse('OK')return JsonResponse({"error": 0,"url": "/media/article_img/%s" % file_obj.name})# 方式2:将文件名用uuid随机生成重命名# 生成新的文件名import uuidnew_str = str(uuid.uuid4())new_uuid = new_str.replace('-', '')new_file_name = new_uuid + '.' + file_obj.name.rsplit('.')[-1]new_file = os.path.join(BASE_DIE, new_file_name)with open(new_file, 'wb') as f:for line in file_obj:f.write(line)return JsonResponse({"error": 0,"url": "/media/article_img/%s" % new_file_name})

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

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

相关文章

单片机(二)使用位移 让灯亮

一&#xff1a;硬件电路 P2 口&#xff1a; P2.0~ P2.7 是这些 I0 口 LED 阳极接 电源 &#xff0c; P20 口 为低电平 可以让 LED灯 亮 二&#xff1a;软件实现部分 两种 ① 通过循环 来展示从左 到右 #include "reg52.h"#define LED_PORT P2 // 定义单片机的P2端…

软考A计划-系统集成项目管理工程师-项目变更管理

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

Jackson 实现 JSON 字段类型处理器

1.处理过程 1.1 实体类设为autoResultMap true TableName(value "table1", autoResultMap true)1.2 字段 typeHandler JacksonTypeHandler.class ApiModelProperty(value "明细")TableField(value "detail", typeHandler JacksonTypeHa…

【Spring Boot】Spring Boot整合多数据源

文章目录 前言一、基本概念1.1 什么是多数据源&#xff1f;1.2 为什么要使用多数据源&#xff1f; 二、如何在 Spring Boot 中整合多数据源&#xff1f;2.1 基本配置2.2 项目代码2.3 注意事项 前言 在实际的开发工作中&#xff0c;我们经常会遇到需要整合多个数据源的情况&…

Nginx使用keepalived配置VIP

VIP常用于负载均衡的高可用&#xff0c;使用VIP可以给多个主机绑定一个IP&#xff0c;这样&#xff0c;当某个负载应用挂了之后&#xff0c;可以自动切到另一个负载。 我这里是在k8s环境中做的测试&#xff0c;集群中有6个节点&#xff0c;我给140和141两个节点配置VIP。 1. 安…

Python土力学与基础工程计算.PDF-压水试验

Python 求解代码如下&#xff1a; 1. import math 2. 3. # 输入参数 4. L 2.0 # 试验段长度&#xff0c;m 5. Q 120.0 # 第三阶段计算流量&#xff0c;L/min 6. p 1.5 # 第三阶段试验段压力&#xff0c;MPa 7. r0 0.05 # 钻孔半径&#xff0c;m 8. 9. # 计算透…

Docker 微服务实战

1. 通过IDEA新建一个普通微服务模块 1.1 建Module docker_boot 1.2 改写pom <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&…

CDN、DNS、ADN、SCDN、DCDN、ECDN、PCDN、融合CDN傻傻分不清楚,一文全部搞懂

一、CDN是什么&#xff1f; CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之…

1267. 统计参与通信的服务器

这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff0c;我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其他服务…

算法练习(9):牛客在线编程09 双指针

package jz.bm;import jz.Interval;import java.util.ArrayList; import java.util.HashMap;public class bm9 {/*** BM87 合并两个有序的数组*/public void merge(int A[], int m, int B[], int n) {int i m - 1, j n - 1, k m n - 1;while (i > 0 || j > 0) {int a…

我是如何使用Spring Retry减少1000 行代码

使用 Spring Retry 重构代码的综合指南。 问题介绍 在我的日常工作中&#xff0c;我主要负责开发一个庞大的金融应用程序。当客户发送请求时&#xff0c;我们使用他们的用户 ID 从第三方服务获取他们的帐户信息&#xff0c;保存交易并更新缓存中的详细信息。尽管整个流程看起来…

Elasticsearch简介及安装

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

H36M VS 3DPW datasets

1采集设备方面 H36M使用了高精度的多视角摄像机动态捕捉系统获得了非常准确和连贯的3D关节坐标标注。 3DPW使用了单目摄像机与IMU的复合传感系统进行采集,存在一定程度的标注噪声。 2场景环境方面 H36M主要针对室内定向动作,背景单一简洁。 3DPW重点是室外复杂环境中人的自…

Interlij IDEA 运行 ruoyi 后端项目。错误: 找不到或无法加载主类 com.ruoyi.auth.RuoYiAuthApplication

错误: 找不到或无法加载主类 com.ruoyi.auth.RuoYiAuthApplication 用了 IDEA运行&#xff0c;参考以下issue删除.idea目录也没有用 (官方文档写是用Eclipse运行&#xff09; 错误: 找不到或无法加载主类 com.ruoyi.auth.RuoYiAuthApplication Issue #I48N2X 若依/RuoYi-C…

前端:运用html+css+jquery.js实现截图游戏

前端:运用htmlcssjquery.js实现截图游戏 1. 前言2. 实现原理3. 参考代码和运行结果 1. 前言 最近在刷手机视频时&#xff0c;总是能刷到一个这样的视频&#xff0c;视频上是一个截图游戏&#xff0c;当图片上的某个片段正好在图片的正确位置时&#xff0c;暂停视频&#xff0c;…

回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍…

Powershell NTP Server Windows 7,8,10,11,2012,2016,2019,2022

NTP前言 NTP服务器是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟、GPS等)做同步化,提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议1。 ntp 参考 w32tmpowershell参考 参考…

宠物赛道,用AI定制宠物头像搞钱项目教程

今天给大家介绍一个非常有趣&#xff0c;而粉丝价值又极高&#xff0c;用AI去定制宠物头像或合照的AI项目。 接触过宠物行业应该知道&#xff0c;获取1位铲屎官到私域&#xff0c;这类用户的价值是极高的&#xff0c;一个宠物粉&#xff0c;是连铲个屎都要花钱的&#xff0c;每…

怎样压缩mp4视频大小?

怎样压缩mp4视频大小&#xff1f;由于视频文件的体积通常比其他类型的文件更大&#xff0c;因此它们需要更多的存储空间来保存。但是&#xff0c;如果我们的设备、应用程序或平台不支持某些视频格式或分辨率&#xff0c;或者我们没有足够的存储空间来容纳这些大型视频文件&…

测试平台metersphere

metersphere可以做接口测试、UI测试、性能测试。 metersphere接口测试底层是jmeter&#xff0c;可以做API管理&#xff0c;快捷调试&#xff0c;接口用例管理&#xff0c;接口自动化场景执行一键选取用例范围&#xff0c;生成测试报告。 会用jmeter&#xff0c;metersphere会…