Django实现音乐网站 ⒆
使用Python Django框架做一个音乐网站,
本篇主要为排行榜功能及音乐播放器部分功能实现。
目录
推荐排行榜优化
设置歌手、单曲跳转链接
排行榜列表渲染优化
视图修改如下:
模板修改如下:
单曲详情修改
排行榜列表
设置路由
视图处理
模板渲染
设置跳转入口
播放器功能开发
设置路由
模板页面
脚本渲染
列表渲染和播放器实现
音乐播放器列表展示关闭
总结
推荐排行榜优化
设置歌手、单曲跳转链接
因为歌手、单曲功能页面已开发,现在终于可以设置跳转链接。
内容如下:
<div class="top_info"><p class="song_name"><a href="{% url 'player:album_song' %}?sid={{item.id}}">{{ item.name }}</a></p><p class="singler"><a href="{% url 'player:singer_detail' jitem.singler.id %}">{{ item.singler.name }}</a></p>
</div>
排行榜列表渲染优化
之前排行榜是通过视图多个集合变量分别进行渲染,在模板页面要写五个排行版模块,分别进行渲染对应的排行榜,经过尝试后整理到一个总排行榜列表集。
视图修改如下:
def index(request):""" 显示首页 """# 获取首页轮播图carousels = Carousel.objects.all()# 推荐歌单 选播放量最多的五个songsheets = SongSheet.objects.order_by('-playnum').all()[0:5]# 推荐排行榜rank_alls = [# 热歌榜 取播放量最多的五个Singe.objects.order_by('-playnum').all()[0:5],# 新歌榜 取最新的五个Singe.objects.order_by('-id').all()[0:5],# 飙升榜Singe.objects.order_by('id').all()[0:5],# 欧美榜Singe.objects.order_by('-id').all()[0:5],# 日韩榜Singe.objects.order_by('id').all()[0:5]]# 推荐歌手 取单曲最多的六个singlers = Singler.objects.order_by('-singe_num').all()[0:6]return render(request, 'index/index.html', locals())
模板修改如下:
两套循环嵌套,外循环渲染父盒子,内循环展示排行榜中列表内容;
通过判断forloop.couter来调用相应排行榜背景图。
<div class="recommend_rank"><div class="title"><div class="name">推荐排行榜</div><ul><li><a href="#">更多></a></li></ul></div><div class="list">{% for rankitem in rank_alls %}<div class="bank"><div class="bank_top"><div class="img"><img class="img_tip" src="{% static 'images/' %}b{{forloop.counter}}.png" alt=""></div><img class="img_bg" src="{% static 'images/' %}b{{forloop.counter}}_{{forloop.counter}}.jpg" alt=""></div><ul class="bank_list">{% for hot in rankitem %}<li>{% if forloop.counter == 1 %}<div class="top_img top1"></div>{% elif forloop.counter == 2 %}<div class="top_img top2"></div>{% elif forloop.counter == 3 %}<div class="top_img top3"></div>{% else %}<div class="top_index">{{forloop.counter}}</div>{% endif %}<div class="top_info"><p class="song_name"><a href="{% url 'player:album_song' %}?sid={{hot.id}}">{{ hot.name }}</a></p><p class="singler"><a href="{% url 'player:singer_detail' hot.singler.id %}">{{ hot.singler.name }}</a></p></div></li>{% endfor %}</ul></div>{% endfor %}</div>
</div>
<!--推荐排行榜结束-->
单曲详情修改
因为之前单曲详情视图处理为查询相应专辑和单曲信息,
需要传递两个参数:即专辑id和单曲id。
但是通过排行榜跳转单曲详情,没有专辑id,故需要修改原来的处理。
通过单曲反向查询所属专辑信息。
内容如下:
def album_song(request):""" 专辑中单曲详情 """sid = request.GET.get('sid')song_info = Singe.objects.filter(id=sid).first()# 反向查询专辑info = song_info.album_set.first()# 歌词处理lyrics = []if song_info:lyrics = read_lyric(song_info.lyric)return render(request, 'album/song.html', locals())
排行榜列表
设置路由
在子应用文件夹中urls.py中新增一条记录。
# 排行榜
path('rank', views.rank, name='rank'),
视图处理
榜单列表需要展示各个排行榜所有一定时间段中上榜单曲列表;
因为前期单曲没有与类型表关联,目前就只能做一个类似的功能。
下方代码中处理了分页查询;通过id来区别类型进行排序;
设置了榜单的名称,更新时间是取单曲列表中时间最晚的一个时间。
def rank(request):""" 排行榜 """id = int(request.GET.get('id', 1))page = int(request.GET.get('page', 1))singe_db = Singe.objectsif id == 1:song_list = singe_db.order_by('-id').all()rank_name = '新歌榜'elif id == 2:song_list = singe_db.order_by('-playnum').all()rank_name = '热歌榜'elif id == 3:song_list = singe_db.order_by('playnum').all()rank_name = '飙升榜'elif id == 4:song_list = singe_db.order_by('-id').all()rank_name = '抖音歌曲榜'elif id == 5:song_list = singe_db.order_by('id').all()rank_name = '万物DJ榜'else:song_list = singe_db.order_by('-playnum').all()rank_name = '会员畅听榜'# 实例化Paginatorpage_num = 20paginator = Paginator(song_list, page_num)try:res = paginator.page(page)except PageNotAnInteger:res = paginator.page(1)except EmptyPage:res = paginator.page(paginator.num_pages)list_num = len(res)# 榜单更新时间updatetime = date.today()for item in song_list:if updatetime.ctime() < item.updatetime.ctime():updatetime = item.updatetimereturn render(request, 'rank/index.html', locals())
模板渲染
在templates文件夹下创建rank文件夹,并在其中创建index.html文件。
其他渲染都大同小异,主要有一点新的东西,因为榜单数据比较多,在第一页时候有个前三名标识,需要区别处理第二页之后的序列号和相应标识处理,这里使用了模板中的过滤器。
内容如下:
{% extends 'common/base.html' %}
{% load static %}{% block title %}我的音乐{% endblock title %}{% block content %}
<link rel="stylesheet" href="{% static 'css/rank.css' %}"><!--导航条开始-->
<div class="header"><img src="{% static 'images/logo.png' %}" class="logo" alt=""><ul><li><a href="{% url 'player:index' %}">推荐</a></li><li><a href="javascript:void(0)" class="selected">排行榜</a></li><li><a href="{% url 'player:singer' 1 '#' %}">歌手</a></li><li><a href="{% url 'player:songsheet' %}">歌单</a></li></ul>
</div>
<!--导航条结束-->
<div class="main_con"><div class="con_l"><div class="con"><div class="tabs flex_c"><span class="active">官方</span><span class="">特色</span><span class="">场景</span></div><ul class="tab_con"><li class="flex_c active"><img alt="" class="cover" data-src="{% static 'images/rank_list_1.png' %}" src="{% static 'images/rank_list_1.png' %}" lazy="loaded"><div class="item_info"><p class="name"><a href="{% url 'player:rank' %}?id=1">新歌榜</a></p><p class="time">今日更新</p></div></li><li class="flex_c active"><img alt="" class="cover" data-src="{% static 'images/rank_list_2.png' %}" src="{% static 'images/rank_list_2.png' %}" lazy="loaded"><div class="item_info"><p class="name"><a href="{% url 'player:rank' %}?id=2">热歌榜</a></p><p class="time">今日更新</p></div></li><li class="flex_c active"><img alt="" class="cover" data-src="{% static 'images/rank_list_3.png' %}" src="{% static 'images/rank_list_3.png' %}" lazy="loaded"><div class="item_info"><p class="name"><a href="{% url 'player:rank' %}?id=3">飙升榜</a></p><p class="time">今日更新</p></div></li><li class="flex_c active"><img alt="" class="cover" data-src="{% static 'images/rank_list_4.png' %}" src="{% static 'images/rank_list_4.png' %}" lazy="loaded"><div class="item_info"><p class="name"><a href="{% url 'player:rank' %}?id=4">抖音歌曲榜</a></p><p class="time">今日更新</p></div></li><li class="flex_c active"><img alt="" class="cover" data-src="{% static 'images/rank_list_5.png' %}" src="{% static 'images/rank_list_5.png' %}" lazy="loaded"><div class="item_info"><p class="name"><a href="{% url 'player:rank' %}?id=5">万物DJ榜</a></p><p class="time">今日更新</p></div></li><li class="flex_c active"><img alt="" class="cover" data-src="{% static 'images/rank_list_6.png' %}" src="{% static 'images/rank_list_6.png' %}" lazy="loaded"><div class="item_info"><p class="name"><a href="{% url 'player:rank' %}?id=6">会员畅听榜</a></p><p class="time">今日更新</p></div></li></ul></div></div><div class="con_r"><div><div><span class="title">{{rank_name}}</span> <span class="update_time">更新时间:{{updatetime}}</span></div><div class="btns"><button class="play bg_primary"><i class="glyphicon glyphicon-play"></i> <span>立即播放</span></button><button><i class="glyphicon glyphicon-plus"></i> <span>添加</span></button><button><i class="glyphicon glyphicon-heart"></i> <span>收藏</span></button></div><div class="list_out"><div class="list_head head_name_rank" style=""><ul class="flex_c"><li class="head_num">序号</li><li class="head_name">歌曲</li><li class="head_artist">歌手</li><li class="head_album">发布时间</li><li class="head_time">时长</li></ul></div><ul class="rank_list">{% for item in res %}<li class="song_item flex_c"><div class="song_rank flex_c">{% if page == 1 %}{% if forloop.counter == 1 %}<div class="rank_num top1"></div>{% elif forloop.counter == 2 %}<div class="rank_num top2"></div>{% elif forloop.counter == 3 %}<div class="rank_num top3"></div>{% else %}<div class="rank_num"><span>{{forloop.counter}}</span></div>{% endif %}{% else %}<div class="rank_num"><span>{{forloop.counter|add:page_num}}</span></div>{% endif %}<div class="status"></div></div><div class="song_name flex_c"><a title="{{item.name}}" href="{% url 'player:album_song' %}?sid={{item.id}}" class="name">{{item.name}}</a></div><div class="song_artist"><span title="{{item.singler.name}}">{{item.singler.name}}</span></div><div class="song_album"><span>{{item.addtime}}</span></div><div class="song_time"><span>{{item.get_song_duration}}</span></div><div class="song_opts flex_c"><i class="glyphicon glyphicon-plus"></i><i class="glyphicon glyphicon-play"></i><i class="glyphicon glyphicon-heart"></i></div></li>{% endfor %}</ul>{% if list_num < 1 %}<!--设置无数据内容--><div class="nodata flex_c"><div class="inner"><img src="{% static 'images/nodata.png' %}"alt="" class="nodata_img"><div class="tip"><p>暂无相关数据</p></div></div></div>{% endif %}<div class="loading-mask" style="display: none;"><div class="loading-wrap"><div class="load"><span class="side1"></span> <spanclass="side2"></span> <span class="mid"></span><span class="side2"></span> <spanclass="side1"></span></div></div></div></div>{% if list_num > 0 %}<!--设置分页页码--><div class="page"><i class="li-page glyphicon glyphicon-menu-left notPointer"></i><ul>{% for index in res.paginator.page_range %}{% if res.number == index %}<li><a href="#" class="notCursor currentPage">{{index}}</a></li>{% else %}<li><a href="{% url 'player:rank' %}?page={{index}}">{{index}}</a></li>{% endif %}{% endfor %}</ul><i class="glyphicon glyphicon-menu-right li-page"></i></div>{% endif %}</div></div>
</div>{% endblock content %}
设置跳转入口
点击推荐排行榜中更多按钮,进入排行榜列表。
内容如下:
<div class="title"><div class="name">推荐排行榜</div><ul><li><a href="{% url 'player:rank' %}">更多></a></li></ul>
</div>
播放器功能开发
其他功能大致算完成了,开始做播放音乐的功能开发。
播放器设置在网站的底部,采用固定悬浮;
可以左右切换音乐,设置音量,查看播放音乐列表。
设置路由
主要用来获取播放器音乐列表信息。
# 播放器列表
path('play_list', views.play_list, name='play_list'),
模板页面
播放器的主要功能采用之前使用html做的播放器,
直接嵌入到django音乐网站基类模板(templates/common/base.html)的底部。
内容如下:
<div id="music_all"><div class="music_main" style="opacity:1;background:#fff"><div class="music_left"><img class="music_img" id="music_img" src="{% static 'images/s1.jpg' %}" alt=""></div><audio id="player"><source src="/media/uploads/1691649371/七里香_-_周杰伦.mp3" type="audio/mpeg">您的浏览器不支持 audio 元素。</audio><div class="play_left"><div class="music_title"><span class="music_name">七里香 – 周杰伦</span><span class="totalTimeSpan">/04:59</span><span class="playTimeSpan">00:00</span></div><div class="music_rate"><div class="music-progress"></div></div></div><div class="play_right"><i class="glyphicon glyphicon-step-backward" id="music_prev"></i><i class="glyphicon glyphicon-play" id="music_dian"></i><i class="glyphicon glyphicon-step-forward" id="music_next"></i></div><div class="music_right"><ul><li><i class="glyphicon glyphicon-th-list" id="setList"></i></li><li><i class="glyphicon glyphicon-volume-up" id="setVolume"></i></li><li><div class="slider"><input type="range" id="volume" min="0" max="100" value="0"></div></li></ul></div></div><div class="songList" style="display:none"><div class="list_top flex_c"><div id="play_title"></div><div class="flex_c"><div class="clear_all"><i class="glyphicon glyphicon-trash"></i> <spanclass="clear_btn">清空列表</span></div><i class="close glyphicon glyphicon-remove"></i></div></div><div class="list_con"><div id="play_list" style="transition-timing-function: cubic-bezier(0.23, 1, 0.32, 1);transition-duration: 0ms; transform: translate(0px) scale(1) translateZ(0px);overflow-y: scroll;height:400px;"></div><div style="position: absolute; z-index: 9999; width: 7px; bottom: 2px; top: 2px; right: 1px; overflow: hidden;"class="bscroll-vertical-scrollbar"><div style="box-sizing: border-box; position: absolute; background: rgba(0, 0, 0, 0.5); border: 1px solid rgba(255, 255, 255, 0.9); border-radius: 3px; width: 100%; transition-duration: 0ms; height: 190px; transform: translateY(0px) translateZ(0px); transition-timing-function: cubic-bezier(0.23, 1, 0.32, 1);"class="bscroll-indicator"></div></div></div></div>
</div>
效果:

脚本渲染
使用JavaScript来实例化audio的提供的接口方法,并结合后台数据进行渲染和调用audio来实现播放器功能。
列表渲染和播放器实现
内容如下:
window.onload = function () {// 绑定音频元素var $player = document.getElementById('player');// 绑定播放按钮var $dian = document.getElementById('music_dian');// 设置音频初始属性var volume_num = 0.5;// 当前歌曲索引var currentIndex = 0;// 设置播放列表var music_list = [{'id': 1,'cover': '/static/images/s1.jpg','singer': '周杰伦','song_name': '七里香','song_path': '/media/uploads/1691649371/七里香_-_周杰伦.mp3'},];// 设置播放器音乐列表var play_list = document.getElementById('play_list');var play_title = document.getElementById('play_title');// 初始化设置setInit();// 绑定音频控制开关$dian.onclick = function () {if (this.classList == 'glyphicon glyphicon-play') {this.className = 'glyphicon glyphicon-pause';$player.play();} else {// layui-icon-pausethis.className = 'glyphicon glyphicon-play';$player.pause();}};// 设置播放器初始属性function setInit() {// 设定音量$player.volume = volume_num;$('#volume').val(volume_num * 100);// 通过同步方式获取播放列表信息$.ajaxSettings.async = false;$.getJSON('/play_list', {}, function (res) {// 赋值播放列表music_list = res.list;});// 设定歌曲封面$('#music_img').attr('src', '/media/' + music_list[0].cover);// 设定歌曲名称和歌手$('.music_name').text(music_list[0].song_name + ' - ' + music_list[0].singer);// 设定歌曲路径$player.src = '/media/' + music_list[0].song_path;// 设置播放器音乐列表set_media_list(music_list)}// 监听播放器播放时间改变事件$player.addEventListener('timeupdate', function () {// 当前播放时间var currentTime = $player.currentTime;// 总时间var totalTime = $player.duration;// 当是数字的时候if (!isNaN(totalTime)) {// 得到播放时间与总时长的比值var rate = currentTime / totalTime;// 设置时间显示// 播放时间$('.playTimeSpan').text(musicTime(currentTime));// 总时长$('.totalTimeSpan').text('/' + musicTime(totalTime));// 设置进度条$('.music-progress').css('width', rate * 441 + 'px');}});// 设置音量$('#volume').change(function () {volume_num = $(this).val();$player.volume = volume_num * 0.01});// 上一首$('#music_prev').click(function () {if (currentIndex > 0) {currentIndex -= 1;} else {// 切换到最后一首currentIndex = music_list.length - 1;}// 设置播放标识为暂停$dian.className = 'glyphicon glyphicon-play';// 播放时间$('.playTimeSpan').text('00:00');// 设置歌曲进度归零$('.music-progress').css('width', '1px');// 设置歌曲setMusic();});// 下一首$('#music_next').click(function () {if (currentIndex < (music_list.length - 1)) {currentIndex += 1;} else {// 切换为第一首currentIndex = 0;}// 设置播放标识为暂停$dian.className = 'glyphicon glyphicon-play';// 播放时间$('.playTimeSpan').text('00:00');// 设置歌曲进度归零$('.music-progress').css('width', '1px');// 设置歌曲setMusic();});// 设置播放器歌曲信息function setMusic() {// 设定歌曲封面$('#music_img').attr('src', '/media/' + music_list[currentIndex].cover);// 设定歌曲名称和歌手$('.music_name').text(music_list[currentIndex].song_name +' - ' + music_list[currentIndex].singer);// 设定歌曲路径$player.src = '/media/' + music_list[currentIndex].song_path;}// 歌曲时长(00:00)function musicTime(sens) {// 分var m = parseInt(sens / 60);// 秒var s = parseInt(sens % 60);// 补零m = m > 9 ? m : "0" + m;s = s > 9 ? s : "0" + s;return m + ":" + s;}// 设置音乐播放器列表function set_media_list(music_list) {var play_html = '';for (var i = 0; i < music_list.length; i++) {if (i) {play_html += '<div class="flex_c list_item" style="pointer-events: auto;">' +'<div class="list_idx">' + (i + 1) + '' +'<span class="playing" style="display: none">';} else {play_html += '<div class="flex_c list_item active_cur" style="pointer-events: auto;">' +'<div class="list_idx">' + (i + 1) + '' +'<span class="playing">';}play_html += '<span class="side1 pause"></span>' +'<span class="side2 pause"></span>' +'<span class="side3 pause"></span>' +'</span>' +'</div>' +'<div class="song_name">' +'<a href="/album/song?sid='+ music_list[i].id +'" title="' + music_list[i].song_name + '" ' +'target="_blank">' + music_list[i].song_name + '</a>' +'</div>' +'<div class="artist">' +'<a href="/singer/detail/'+music_list[i].singer_id +'" ' +'class="" title="' + music_list[i].singer + '" target="_blank">' + music_list[i].singer + '</a>' +'</div>' +'<div class="time">' + music_list[i].duration + '</div>' +'<div class="song_opts flex_c">' +'<i title="添加歌曲" class="glyphicon glyphicon-plus"></i> ' +'<i title="收藏歌曲" class="glyphicon glyphicon-heart"></i> ' +'<i title="下载歌曲" class="glyphicon glyphicon-save"></i> ' +'<i title="删除歌曲" class="glyphicon glyphicon-trash"></i> ' +'</div>' +'</div>';}play_title.innerHTML='<span class="text">播放列表</span> <span class="num">(共'+ music_list.length +'首)</span>';play_list.innerHTML=play_html;console.log(play_title);}
};
音乐播放器列表展示关闭
可通过底部播放器列表icon来打开和关闭播放列表;
也可以通过播放列表中关闭icon来隐藏播放列表。
内容如下:
$('#setList').click(function(){// 展示关闭音乐播放器列表var songList = $('.songList');if (songList.css('display') == 'none') {songList.show();}else{songList.hide();}
})$('.close').click(function(){// 关闭播放列表$('.songList').hide();
});
总结
本篇主要是推荐页-排行榜功能改为动态数据及播放器功能部分实现,可以播放音乐和左右切换以及查看播放音乐列表。
相关文章:
Django实现音乐网站 ⒆
使用Python Django框架做一个音乐网站, 本篇主要为排行榜功能及音乐播放器部分功能实现。 目录 推荐排行榜优化 设置歌手、单曲跳转链接 排行榜列表渲染优化 视图修改如下: 模板修改如下: 单曲详情修改 排行榜列表 设置路由 视图处理…...
20基于MATLAB的车牌识别算法,在环境较差的情景下,夜间识别度很差的车牌号码可以精确识别出具体结果,程序已调通,可直接替换自己的数据跑。
基于MATLAB的车牌识别算法,在环境较差的情景下,夜间识别度很差的车牌号码可以精确识别出具体结果,程序已调通,可直接替换自己的数据跑。 20matlab车牌识别 (xiaohongshu.com)...
vue音频制作
Vue 音频制作指的是使用 Vue.js 框架开发音频制作相关的 Web 应用程序。Vue.js 是一种现代化的 JavaScript 框架,它可以帮助开发者更快速、更高效地构建交互式的 Web 应用程序。 音频制作在 Vue.js 中的实现可以通过使用一些开源音频库和插件来实现,如 …...
好莱坞编剧大罢工终于结束;与OpenAI创始人共进早餐;使用DALL-E 3制作绘本分享;生成式AI的基础设施架构 | ShowMeAI日报
👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 好莱坞编剧大罢工终于结束:简单说就是AI妥协了 https://www.wgacontract2023.org/the-campaign/summary-of-the-2023-wga-…...
buuctf week2-web-ez_sql
闭合之后尝试判断字段数,存在WAF,使用大小写绕过(后面的sql语句也需要进行大小写绕过) ?id1 Order by 5-- 测出有5列 ?id1 Order by 6-- 查一下数据库名、版本、用户等信息 ?id1Union Select database(),version(),user(),4,…...
实验2.1.2 交换机的常用配置
项目2 交换技术的位置 活动2 交换机的常用配置 一、具体要求: (1)添加1台计算机,将标签名更改为PC1。 (2)添加1台S3700-26C-HI交换机,标签名为SWA,将交换机的名称设置为SWA。 &am…...
功率放大器应用场景分析报告
功率放大器作为一种能够将低电压信号放大到高电压水平的关键设备,在多个领域中发挥着重要作用。报告通过对实验研究、射频通信、能源与电力系统、医疗诊断与治疗以及工业自动化等领域的综合分析,下面西安安泰为大家介绍功率放大器的应用场景。 实验研究 …...
解决 Centos 安装 Python 3.10 的报错: Could not import runpy module
操作环境:CentOS 7、Gcc 4.8.5、Python 3.10.0 系统上已经有 2.x,3.6 版本的 Python 了,但是还是想装一个 3.10 的。因为刚写的脚本文件是较高版本的,在 3.6 上无法正常运行,Python 语法不是很了解,只能从…...
HTML5简介-HTML5 新增语义化标签-HTML5 新增多媒体标签
一、HTML5简介 HTML5,全称为HyperText Markup Language 5,是HTML的第五个版本,由万维网联盟(World Wide Web Consortium,W3C)和Web Hypertext Application Technology Working Group(WHATWG&am…...
pyqt---子线程进行gui操作导致界面崩溃
在 PyQt(或 Qt 通常)中,您不能直接在子线程中执行与 GUI 相关的操作。这可能会导致应用程序崩溃或不可预测的行为。所有与 GUI 相关的操作都应该在主线程中执行。 如果您需要在子线程完成某些操作后显示一个消息框,可以使用 PyQt…...
vue-cli 输出的模板 html 文件使用条件语句
背景 项目使用的是 vue-cli 脚手架,需要根据不同环境的配置,在输出的 html 模板中使用条件语句来生成不同的代码。 环境变量 在 .env.development 中,定义环境变量 VUE_APP_DISABLE_IP_ACCESStrue使用条件语句 第一种方法,使…...
Spring Boot集成kafka的相关配置
引入依赖: 额外依赖只需要这一个,kafka-client 不是springboot 的东西,那是原生的 kafka 客户端, kafka-test也不需要,是用代码控制broker的东西。 <dependency><groupId>org.springframework.kafka</g…...
Git(11)——Git相关问题解答以及常用命令总结
目录 一、简介 二、问题 三、常用命令总结 一、简介 本篇文章将介绍作者在学习Git的过程所遇到的困惑以及熟悉Git后总结的常用命令 二、问题 ①Git配置的邮箱和用户名和Git的ssh密钥有什么联系?假如我使用Gitlab在张三这个账户上配置了ssh公钥,但是…...
【LeetCode高频SQL50题-基础版】打卡第7天:第36~40题
文章目录 【LeetCode高频SQL50题-基础版】打卡第7天:第36~40题⛅前言按分类统计薪水🔒题目🔑题解 上级经理已离职的公司员工🔒题目🔑题解 换座位🔒题目🔑题解 电影评分🔒题目&#x…...
C++入门1
C入门1 1.前言2.命名空间1.C语言对于命名空间方面的缺陷2.命名空间的语法特性1.域作用限定符2.命名空间的可嵌套性 3.声明与定义分离的命名空间4.命名空间的展开5.多个命名空间中命名冲突6.对于命名空间的推荐写法 3.iostream1.cout和endl2.cin 3.缺省参数1.缺省参数的形式2.缺…...
Matlab论文插图绘制模板第118期—进阶气泡图
之前的文章中,分享过Matlab气泡图的绘制模板: 图虽说好看,但有一个缺点:需要手动调节两个图例的位置。 为了解决这一问题,我们不妨结合前段时间分享的紧凑排列多子图的绘制模板: 从而达到自动对齐排列的效…...
grafana接入OpenTSDB设置大盘语法
目录 1、filter过滤语法1.1 精准匹配1.2 正则匹配1.3 通配符匹配 完整示例1、 展示应用app的CPU利用率监控2)展示应用app的在线核数 1、filter过滤语法 1.1 精准匹配 literal_or : tagv的过滤规则: 精确匹配多项迭代值,多项迭代值以’|分隔&a…...
HarmonyOS 远端状态订阅开发实例
IPC/RPC 提供对远端 Stub 对象状态的订阅机制, 在远端 Stub 对象消亡时,可触发消亡通知告诉本地 Proxy 对象。这种状态通知订阅需要调用特定接口完成,当不再需要订阅时也需要调用特定接口取消。使用这种订阅机制的用户,需要实现消…...
实战一:Http轮询弹幕拦截
系列文章目录 训练地址:https://www.qiulianmao.com websocket逆向http拦截websocket拦截视频号直播弹幕采集实战一:Http轮询更新中实战一:Http轮询 系列文章目录前言一、判断消息传输技术二、用户进入直播间三、 用户发言四、 用户送礼五、点赞事件六、用户唯一id的获取七…...
虚拟机独立 IP 配置
虚拟机独立 IP 配置 1. 点击虚拟网络编辑器 2. 点击更改设置 3. 查看本地电脑网卡型号并设置虚拟网络编辑器桥接网卡为同型号网卡 4. 设置有限网络信息 5. 点击网络编辑按钮并点击身份 6. 编辑名称并选择MAC地址 7. 配置 IPv4 地址后点击应用即可...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
