django_创建菜单(实现整个项目的框架,调包)

news2024/9/21 18:58:27

文章目录

  • 前言
  • 代码仓库地址
  • 在线演示网址
  • 启动网站的时候出现错误
  • 渲染
  • 路径的一些说明
  • 文件结构
  • 网页显示一条错误
  • 路由顺序
  • js
  • 打包
  • 出现问题的代码
  • 函数没有起作用
  • 关于进度
  • 开发细节
  • 显示不了图片
  • 梳理一下函数调用的流程
  • 修改一些宽度参数
  • class
  • js 里面的一些细节
  • 让三个按钮可以点击
  • 设置按钮的样式
  • 在前端实现页面的切换
  • 结语

前言

为了赶进度,没有写什么记录文档,其实也快不了多少,反而不写记录文档,做的过程中遇到的一些问题,自己解决之后,以后回顾的时候容易忘记,所以记录其实算是一个非常好的习惯,进度重要,扎实也比较重要

代码仓库地址

代码仓库

欢迎大家多多 star

在线演示网址

网址

目前是这个网址,但是这个服务器是笔者租的服务器,三个月之后就会到期,到时候笔者可能需要把 docker 里面的文件打包传到新的服务器上面,或者是继续租现在免费体验的这个服务器,之后再更新

启动网站的时候出现错误

笔者输入这条命令,试图启动网站(昨天晚上其实就已经成功启动网站了,只是今天改了点儿东西就启动不了了)
python3 manage.py runserver 0.0.0.0:8000
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
昨天晚上算是实现了一些简单的网页展示,还有跳转的按钮,今天做的修改是把一些路由改了

URL 代表着是统一资源定位符(Uniform Resource Locator)。URL 无非就是一个给定的独特资源在 Web 上的地址。理论上说,每个有效的 URL 都指向一个唯一的资源。这个资源可以是一个 HTML 页面,一个 CSS 文档,一幅图像,等等。而在实际中,也有一些例外,最常见的情况就是一个 URL 指向了不存在的或是被移动过的资源。由于通过 URL 呈现的资源和 URL 本身由 Web 服务器处理,因此 web 服务器的拥有者需要认真地维护资源以及与它关联的 URL

SyntaxError: closing parenthesis ‘]’ does not match opening parenthesis ‘(’ on line 8

上面出现的这个问题是语法错误,应该是敲代码的时候敲错了

index文件少写了一个小括号,加上之后成功启动了网站
在这里插入图片描述
能够在终端看到这个访问记录
在这里插入图片描述

渲染

简单的解释,前端写好html模板,让后端直接填数据,这就是后端渲染。 前端渲染是,通过ajax请求接口返回的数据,将数据渲染出来。 后端只写接口,分工更明细

在软件开发中,"渲染"通常指的是将数据或者某种描述转换为用户界面的可视化输出的过程


按照笔者的理解就是把代码或者字符串输出为图片文字等,让没有学过计算机的用户能够简单直接的使用这个软件(或者说是系统)

该项目是前后端分离的项目,前端渲染的好处就是可以降低服务器的压力

路径的一些说明

from django.urls import path,include
from game.views.index import index

urlpatterns=[
    path("",index,name="index"),
    path("menu/",include("game.urls.menu.index")),
    path("playground/",include("game.urls.playground.index")),
    path("settings/",include("game.urls.settings.index"),
]

上面的代码是整个项目的 index 文件,中括号里第一行是返回项目网址的链接(因为什么都没加,是一个空值),我们查看现在的网站的源码,如下

(这个还不算是整个项目的 index 文件,这个是 urls 里面的 index 文件,按照笔者的理解,这些 index 文件主要作用是提供一些可以跳转的路径,因为逻辑的改变,可以跳转到不同的页面)
在这里插入图片描述
可以发现上面的代码和这个代码是一模一样的

{% load static %}
<head>
    <link rel="stylesheet" href="https://cdn.acwing.com/static/jquery-ui-dist/jquery-ui.min.css">
    <script src="https://cdn.acwing.com/static/jquery/js/jquery-3.3.1.min.js"></script>
    <link rel="stylesheet" href="% static 'css/game.css' %">
    <script src="{% static 'js/dist/game.js' %}"></script>
</head>

<body style="margin:0">
    <div id="ac_game_12345678"></div>
    <script>
        $(document).ready(function("ac_game_12345678"){
            let ac_game=AcGame();

        });
    </script>
</body>

这份代码是 Multiple_front_ends/web.html ,表示的是多个前端文件夹下面的 web 前端文件

该项目的定位是一个后端,等未来有机会的话,希望能实现多个前端,比如说网页端,应用端,小程序端等

文件结构

在这里插入图片描述

网页显示一条错误

GET http://39.105.183.81:8000/%%20static%20'css/game.css'%20% net::ERR_EMPTY_RESPONSE
我找到这个文件,去对应的地方修改一下

修改了一下,发现是因为文件里面没有什么具体的内容,所以报错了,没有什么影响

到目前为止就把前期的一些准备工作做好了

后面发现不是因为文件是空的报错,而是因为一个语法格式写错了报错的,后面有写

路由顺序

首先访问 fight 里面的 fight 文件夹里面的 urls 文件,

"""fight URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('',include('game.urls.index')),
    path('admin/', admin.site.urls),
]

跳转到 game.urls.index 文件

from django.urls import path,include
from game.views.index import index

urlpatterns=[
    path("",index,name="index"),
    path("menu/",include("game.urls.menu.index")),
    path("playground/",include("game.urls.playground.index")),
    path("settings/",include("game.urls.settings.index")),
]

然后跳转到 views 里面的 index 文件

from django.shortcuts import render

def index(request):
    return render(request,"Multiple_front_ends/web.html")

然后跳转到 Multiple_front_ends/web.html 文件,这个文件里面的内容就是目前网页显示的源代码

js

这个文件夹下面有一些文件夹和文件
在这里插入图片描述

打包

每一次修改 js 文件之后都需要打包一下这个文件,也就是执行一次scripts/compress_game_js.sh 文件

#! /bin/bash

JS_PATH=/home/acs/fight/game/static/js/
JS_PATH_DIST=${JS_PATH}dist/
JS_PATH_SRC=${JS_PATH}src/

find . $JS_PATH_SRC -type f -name '*.js' | sort | xargs cat > ${JS_PATH_DIST}game.js

src 里面的所有 js 文件打包发送到 distgame.js 文件里面

出现问题的代码

<link rel="stylesheet" href="% static 'css/game.css' %">

这段代码貌似没啥问题

改成了这样就没有错误了
<link rel="stylesheet" href="{% static 'css/game.css' %}">

原来是没有加大括号

函数没有起作用

在这里插入图片描述

目前在 zbase.js文件里面的输出,没有正常在控制台显示

我们可以看到,这个 web.html 显示的是这个输出

{% load static %}
<head>
    <link rel="stylesheet" href="https://cdn.acwing.com/static/jquery-ui-dist/jquery-ui.min.css">
    <script src="https://cdn.acwing.com/static/jquery/js/jquery-3.3.1.min.js"></script>
    <link rel="stylesheet" href="% static 'css/game.css' %">
    <script src="{% static 'js/dist/game.js' %}"></script>
</head>

<body style="margin:0">
    <div id="ac_game_12345678"></div>
    <script>
        $(document).ready(function(){
            let ac_game=new AcGame("ac_game_12345678");

        });
        console.log("hello world");
    </script>
</body>

是正常的,是笔者看教程的时候把这个漏掉了,应该是因为教程把这个代码里面的 hello world 删除了,然后在 zbase.js 文件里面进行修改
在这里插入图片描述

删除之后并没有显示我们想要看到的内容,我们把这个文件修改,打包刷新之后没有像教程一样,在控制台输出我们需要的内容

这是为什么呢

检查 game.js 文件,发现是这个情况
在这里插入图片描述
zbase.js文件里面的内容是一样的,只是没有显示在控制台

我们认为可能是调用这个函数的时候没有调用成功,可能是函数名字没有写对

对比了一下代码都是相同的,可能是因为空行的原因吗,感觉基本不可能因为空行调用不了函数,但还是试试
在这里插入图片描述
太离谱了呀,我把空行删除之后就能正常显示了,可能是因为这个控制台每次只能输出一行数据

关于进度

今天本来想学两个章节,但是现在这一个章节都没有学完,我今天不把这一个章节学完就不睡觉了,之后每天至少学一个章节,要把进度推一推

开发细节

因为打包的函数是按照文件名的字典序来打包的,所以我们把文件名前面加上一个 z 可以保证这个文件会出现在最后面,否则不是在最后面,可能出现先调用再定义的问题,会报错

显示不了图片

把背景图片加到 css 文件里面,但是自己的网页还是空白的

我不知道问题出在哪里,准备返回去重新听一遍教程

js 文件里面,一般对象是 html 对象,前面加上 $ 符号,不是的话就不加

找到问题所在了,有一行语法写的有点问题,少了一个等号,加上之后就可以正常显示图片了

在这里插入图片描述

梳理一下函数调用的流程

首先是主函数,就是 web.html 文件,然后调用了 zbase.jsAcGame 函数,这个函数里面调用了 js/menu/zbase.js 文件里面的 AcGameMenu 函数,这个函数里面创建了一个 div ,存到了最开始的 web.html 里面,等于说形成了一个闭环

我们可以查看一下源码
在这里插入图片描述

确实在这里创建好了,但是确实比较难以找到

修改一些宽度参数

可以看到前面展示的图片不是一个完整的图片,有一些别的图片,我们把高度宽度都设置成百分之百就可以让图片占据整个屏幕
在这里插入图片描述
全屏显示效果更佳
在这里插入图片描述

class

因为一些专有名词自己其实记住没有什么意义,知道是怎么使用的其实更加实在,笔者初中的时候沉迷转魔方,但是其实也是只会那个最初阶的魔方公式,然后就跟着教程练会了之后,自己其实也不知道怎么就能拼好,形成了肌肉记忆了都,但是要我教会别人,我可能得再整理一下思路

class 写在 div 里面,目前这个部分写在了 js 文件里面,之后需要在 css 文件里面使用 .class_name{} 来调整这个板块的样式

一个 class 里面可以有多个描述的东西,比如这样:<div class="ac-game-menu-field-item ac-game-menu-field-item-single">

js 里面的一些细节

我写的时候一直比较模糊,现在梳理一下这个文件里面的一些代码,之后担心随着项目的推进,这个问题一直没有解决

首先目前写了两个 js 文件,一个是 game/static/js/src/zbase.js 这个文件,另一个是 game/static/js/src/menu/zbase.js 这个文件

前面的是一个整体的 js 文件,后面的是菜单部分的 js 文件

其实这两个文件最后都是放到 game/static/js/dist/game.js 里面执行的,主要是把文件分开,开发者在开发的时候更加方便,是使用了一个打包的脚本文件把所有的 js 文件全部集成到 game.js 文件里面(scripts/compress_game_js.sh)

下面分析一下 game/static/js/src/zbase.js 该文件

class AcGame{
    constructor(id){
        this.id=id;
        this.$ac_game=$('#'+id);
        this.menu=new AcGameMenu(this);
    }
}

这种其实是一些模板函数,构造函数,然后把一些参数传进去

下面说一下这个文件 game/static/js/src/menu/zbase.js

class AcGameMenu{
    constructor(root){
        this.root=root;
        this.$menu=$(`
<div class="ac-game-menu">
    <div class="ac-game-menu-field">
        <div class="ac-game-menu-field-item ac-game-menu-field-item-single">
            单人模式
        </div>

        <div class="ac-game-menu-field-item ac-game-menu-field-item-multi">
            多人模式
        </div>

        <div class="ac-game-menu-field-item ac-game-field-item-settings">
            设置
        </div>
    </div>
</div>
`);
        this.root.$ac_game.append(this.$menu);
    }
}

构造函数调用了 root ,也就是前面一个文件,创建了一个菜单,然后把这个菜单加到了 root 的后面,创建菜单的时候用了 $ 表示这是一个 html 对象,具体写 html 的时候用 `` 把自己定义的 div 括起来,里面是一些简单的 htmlclass 的写法

之前大二下的时候其实学过一部分 web 的知识,所以这个不算太陌生,但是自己之前感觉和没学区别不是很大,没有转换为生产力呀

让三个按钮可以点击

this.$singel=this.$menu.find('.ac-game-menu-field-item-single');
this.$multi=this.$menu.find('.ac-game-menu-field-item-multi');
this.$settings=this.$menu.find('.ac-game-field-item-settings');  

注意 class 前面需要加上 . 才能找到这个 class

设置按钮的样式

在这里插入图片描述
现在这里有三个按钮,但是明显不是很美观,非常简陋,但是因为这个项目重点不在于前端,所以最后可能前端也不是很美观

等笔者把前端知识也学了一点之后,有时间会再完善一下,现在先稍微完善一下

vh vw 表示设置百分比的高度和宽度,比较方便
在这里插入图片描述
设置的 css 样式如下,都比较简单直观

.ac-game-menu-field{
    width:20vw;
    position:relative;
    top:40vh;
    left:19vw;
}

.ac-game-menu-field-item{
    color:white;
    height:7vh;
    width:18vw;
    font-size:6vh;
    font-style:italic;
    padding:2vh;
    background-color:rgba(39,21,28,0.6);
    text-align:center;
    border-radius:10px;
    letter-spacing:0.5vx;
    cursor:pointer;                                                                                                                               
}

css鼠标悬停样式
实现鼠标悬停的动态效果的代码如下

.ac-game-menu-field-item:hover{
    transform:scale(1.2);
    transition:100ms;
}

在前端实现页面的切换

menu 下面的 js 文件里面设置了一些函数,但是在前端浏览器控制台看不到自己的函数输出,不知道原因

在这里插入图片描述
按道理说自己点击了图标,在控制台会显示点击了这个按钮

使用的代码如下

start(){
        this.add_listening_events();
    }                                                                                                                                             

    add_listening_events(){
        let outer=this;
        this.$single_mode.click(function(){
            console.log("click single mode");
        });
        this.$multi_mode.click(function(){
            console.log("click multi mode");
        });
        this.$settings.click(function(){
            console.log("click settings");
        });
    }

前面还有一个 start 函数的使用,只有一行,就没有粘贴过来了

自己找了一遍没有发现问题出在哪里,现在回过头去看教程是怎么操作的,这次看仔细一点

在这里插入图片描述
目前是有一个报错和一个警告,还是有点无奈的

重新看了一遍教程,和我写的是一样的,但是为什么我的代码报错警告了,控制台输出不了想要输出的内容呢

试了一下源代码仓库的文件也是显示不行,应该不是我这边的问题了,我继续跟着教程做就行

看来不行,这一步卡住之后,后面的也和教程不一样了

点击进入到一个新界面,目前点击这个按钮进入不了新的界面
在这里插入图片描述

class AcGameMenu {
    constructor(root) {
        this.root = root;
        this.$menu = $(`
<div class="ac-game-menu">
    <div class="ac-game-menu-field">
        <div class="ac-game-menu-field-item ac-game-menu-field-item-single-mode">
            单人模式
        </div>
        <br>
        <div class="ac-game-menu-field-item ac-game-menu-field-item-multi-mode">
            多人模式
        </div>
        <br>
        <div class="ac-game-menu-field-item ac-game-menu-field-item-settings">
            设置
        </div>
    </div>
</div>
`);
        this.root.$ac_game.append(this.$menu);
        this.$single_mode = this.$menu.find('.ac-game-menu-field-item-single-mode');
        this.$multi_mode = this.$menu.find('.ac-game-menu-field-item-multi-mode');
        this.$settings = this.$menu.find('.ac-game-menu-field-item-settings');

        this.start();
    }

    start() {
        this.add_listening_events();
    }

    add_listening_events() {
        let outer = this;
        this.$single_mode.click(function(){
            outer.hide();
            outer.root.playground.show();
        });
        this.$multi_mode.click(function(){
            console.log("click multi mode");
        });
        this.$settings.click(function(){
            console.log("click settings");
        });
    }

    show() {  // 显示menu界面
        this.$menu.show();
    }

    hide() {  // 关闭menu界面
        this.$menu.hide();
    }
}

menu 里面的 js 文件写成上面这样可以跳转和在控制台正常显示输出,但是还是有一些报错

playground 里面的 js 文件重新写了一遍,现在没有报错了,估计是因为一些肉眼看不见的标点符号之类的错误,因为笔者有时候操作 tmuxvim 有一些误操作,所以以后宁愿写的慢一点,也不要把代码敲错,debug 的时间远大于节省的这一点点打字的时间
在这里插入图片描述

结语

这个菜单就算结束了,确实作为独立开发者,自己的源码还是闭源比较好,但是这个作为自己的学习项目的话,开源影响也不是很大,等自己以后独立开发的时候再闭源,目前自己的 github 其实有含金量的东西,可以认为是没有的哈哈哈

以后要是自己一个人一个月,可以上线一款 app ,想想还是非常激动的

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

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

相关文章

前端JS特效第56集:基于canvas的粒子文字动画特效

基于canvas的粒子文字动画特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compat…

GPT-4O 的实时语音对话功能在处理多语言客户时有哪些优势?

最强AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量 我瞄了一眼OpenAI春季发布会&#xff0c;这个发布会只有26分钟&#xff0c;你可以说它是一部科幻短片&#xff0c;也可以说它过于“夸夸其谈”&#xff01;关于…

5个工具帮助你轻松将PDF转换成WORD

有时候编辑PDF文件确实不如编辑word文档方便&#xff0c;很多人便会选择先转换再编辑。但是如果还有人不知道要怎么将PDF文件转换成word文档的话&#xff0c;可以看一下这5款工具&#xff0c;各种类型的都有&#xff0c;总有一款可以帮助到你。 &#xff11;、福昕PDF转换软件 …

socket实现全双工通信,多个客户端接入服务器端

socket实现全双工通信 客户端&#xff1a; #define IP "192.168.127.80" //服务器IP地址 #define PORT 7266 // 服务器端口号int main(int argc, const char *argv[]) {//1.创建套接字&#xff1a;用于接收客户端链接请求int sockf…

MSQP Mysql数据库权限提升工具,UDF自动检测+快速反向SHELL

项目地址:https://github.com/MartinxMax/MSQP MSQP 这是一个关于Mysql的权限提升工具 安装依赖 $ python3 -m pip install mysql-connector-python 使用方法 $ python3 msqp.py -h 权限提升:建立反向Shell 在建立反向连接前,该工具会自动检测是否具有提权条件&#xff0…

4-4 数值稳定性 + 模型初始化和激活函数

数值稳定性 这里的 t t t表示层&#xff0c;假设 h t − 1 h^{t-1} ht−1是第 t − 1 t-1 t−1层隐藏层的输出&#xff0c;经过一个 f t f_{t} ft​得到第 t t t层隐藏层的输出 h t h^{t} ht。 y y y表示 x x x进来&#xff0c;第一层一直到第 d d d层&#xff0c;最后到一个损…

2024最新网络安全自学路线,内容涵盖3-5年技能提升

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

NC 二叉树的最大深度

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 求给定二叉树…

图像数据增强方法概述

图像数据增强方法概述 1. 什么是图像数据增强技术?2. 图像数据增强技术分类2.1 几何变换Python 示例代码 2.2 颜色变换2.3 噪声添加 3. 参考文献 1. 什么是图像数据增强技术? 基础概念&#xff1a;图像增强技术是计算机视觉和图像处理领域中的一个关键技术&#xff0c;主要用…

数据库安全综合治理方案(可编辑54页PPT)

引言&#xff1a;数据库安全综合治理方案是一个系统性的工作&#xff0c;需要从多个方面入手&#xff0c;综合运用各种技术和管理手段&#xff0c;确保数据库系统的安全稳定运行。 方案介绍&#xff1a; 数据库安全综合治理方案是一个综合性的策略&#xff0c;旨在确保数据库系…

C++文件系统操作6 - 跨平台实现查找指定文件夹下的特定文件

1. 关键词 C 文件系统操作 查找指定文件夹下的特定文件 跨平台 2. fileutil.h #pragma once#include <string> #include <cstdio> #include <cstdint> #include "filetype.h" #include "filepath.h"namespace cutl {/*** brief The fi…

前端练习<HtmlCSS>——照片墙(附完整代码及实现效果)

这个小练习也来源于b站up小K师兄&#xff0c;大家可以通过下面的链接学习哦~up讲的非常详细。 纯CSS写一个简单酷炫的照片墙效果&#xff5e; 先看一下这个照片墙的效果&#xff1a; 1.鼠标没有放到图片上时&#xff0c;照片同比例&#xff0c;每张照片都有倒影的效果。 2.然…

linux怎么创建python

第一步&#xff0c;创建一个test文件夹。 第二步&#xff0c;打开终端进入该文件。 第三步&#xff0c;vim test.py。 第四步&#xff0c;编写代码。 第五步&#xff0c;编辑好之后&#xff0c;按Esc键切换到命令模式&#xff0c;然后输入:wq&#xff0c;再按回车键即可自动保存…

聊一聊知识图谱结合RAG

因为最近在做一些关于提高公司内部使用的聊天机器人的回答准确率&#xff0c;并且最近微软官方也是开源了一下graphrag的源码&#xff0c;所以想聊一聊这个知识图谱结合rag。 rag在利用私有数据增强大模型回答的领域是一种比较典型的技术&#xff0c;也就是我们提出问题的时候&…

MATLAB基础:数组及其数学运算

今天我们继续学习MATLAB中的数组 我们在学习MATLAB时了解到&#xff0c;MATLAB作者秉持着“万物皆可矩阵”的思想企图将数学甚至世间万物使用矩阵表示出来&#xff0c;而矩阵的处理&#xff0c;自然成了这门语言的重中之重。 数组基础 在MATLAB中&#xff0c;数组是一个基本…

LCD 横屏切换为竖屏-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

LCD 横屏切换为竖屏 横屏显示如何切换为竖屏显示 LCD 屏默认横屏显示 开发板配套的 LCD 屏默认都是横屏显示&#xff0c;如 4.3 寸、7 寸和 10.1 寸的不同分辨率的 RGB LCD 屏 固定坐标体系 &#xff08;以 800*480 分辨率为例&#xff09;横屏模式下的固定坐标&#xff1a;…

【JavaScript】深入理解 `let`、`var` 和 `const`

文章目录 一、var 的声明与特点二、let 的声明与特点三、const 的声明与特点四、let、var 和 const 的对比五、实战示例六、最佳实践 在 JavaScript 中&#xff0c;变量声明是编程的基础&#xff0c;而 let、var 和 const 是三种常用的变量声明方式。本文将详细介绍这三种变量声…

Blackbox AI-跨时代AI产物,你的私人编程助手

1. 引言 随着人工智能技术的飞速发展&#xff0c;我们的生活方式正在经历前所未有的变革。从智能家居到自动驾驶&#xff0c;AI已经渗透到我们生活的方方面面。而在这场科技革命中&#xff0c;Blackbox 网站凭借其先进的技术和全面的功能&#xff0c;成为了众多AI产品中的佼佼者…

基于单片机控制的锂电池组电路的设计

摘 要: 提 出 一 种 基 于 单 片 机 控 制 的 锂 电 池 组 电 路 设计 方 案 . 采 用 8 位 CMOS 闪 存 单 片 机 PIC16F886 作 为主控芯 片 , 电 路 设计 中 含 有 S-8254 芯 片 的 一 次 保 护 电 路 、 S-8244 芯 片 的 二 次 保 护 电 路 和 MCU 的 辅 助 保 护 功…

photoshop学习笔记——选区3 快速选择工具

快速选择工具 W shift W 在3种快速选择工具之间切换 对象选择工具 photoshop CC中没有这个工具&#xff0c;利用AI&#xff0c;将款选中的对象快速的提取选区&#xff0c;测试了一下&#xff0c;选区制作的非常nice快速选择工具 跟磁性套索类似&#xff0c;自动识别颜色相似…