Django Ajax

【一】Json

【1】介绍

  • JSON(javascript object otaition)是一种轻量级数据交换格式
  • JSON使用了Javascript的一部分语法来定义其数据格式,但Json是独立于语言
  • Json采用完全独立于语言的文本格式,使得Json成为理想的数据交互语言,几乎所有的现代编程语言都也有工具可以解析Json
  • 它是一种键值对形式的数据结构,易于人的阅读和编写,也易于机器的解析
  • Json格式的提出
    • 目的取代繁琐笨重的XML格式

【2】格式

  • 属性名必须使用双引号
  • 能使用十六进制值
  • 能使用undefind
  • 能使用日期和函数对象
{"name": "John Doe","age": 30,"is_student": false,"subjects": ["Math", "English", "Science"],"address": {"street": "123 Main St","city": "Anytown","state": "CA"}
}

【3】数据格式转换

请添加图片描述

【二】Ajax

【1】介绍

(1)概念

  • AJAX(全称:Asynchronous JavaScript and XML,异步的Javascript和和XML)
  • AJAX是一种无需重新加载整个页面的情况下,能够更新部分网页的技术
  • 简单说:AJAX是一种用于创动态网页的编程技术
  • 这意味着网页再被用户查看和交互的同时,可以与服务器进行数据交换和页面更新。
  • 尽管名字中含有XML,但是在实践中,数据格式通常是JSON,并非XML
  • 简单的将:异步交互局部刷新

(2)大致工作原理

  1. 用户在浏览器进行操作(例如:点击一个按钮)
  2. Javascript创建一个XMLHttpRequest对象,然后向服务器发送请求
  3. 服务器处理这个请求
  4. 服务器将响应发送回网页
  5. Javascript读取响应,然后对网页进行响应的更新
  • 关键:
    • 关键是XMLHttpRequest对象
    • 这个对象是AJAX的主要接口,他提供了浏览器和服务器之间的进行异步通信的能力
  • 请求方式
    • 既可以发送get请求又可以发送post请求

(3)请求方式小结

  • 浏览器地址输入URL回车:GET请求
  • a标签的跳转:GET请求
  • form表单:既可以GET也可以POST
  • AJAX:既可以GET也可以POST

【2】加法案例

(1)前端

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width,initial-scale=1.0"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"><script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script></head>
<body><div>number_one: <input type="text" id="num1"></div>
<div>number_two: <input type="text" id="num2"></div>
<div>result: <input type="text" id="result"></div>
<button id="btn_result">求和计算</button><script>{#等待页面加载完毕#}$(document).ready({#给按钮绑定事件#}$("#btn_result").click(function () {{#异步触发AJAX#}$.ajax({{#提交数数据路径, 和action一样#}url: "",{#提交方式#}type: "post",{#表示期望从数据库返回的数据类型(json、xml、script、html)#}dataType:"json",{#提交给后端的数据, 键值可以直接写#}data: {number1: $("#num1").val(),"number2": $("#num2").val()},{#回调函数,data是后端返回的数据#}success: function (data) {console.log(data, typeof data){#102 string#}$("#result").val(data)}})}))
</script></body>
</html>

(2)后端

from django.shortcuts import render, HttpResponse, JsonResponsedef home(request):if request.method == "POST":data = request.POSTprint(data)num1 = data.get("number1")num2 = data.get("number2")result = int(num1) + int(num2)return HttpResponse(result)return JsonResponse(result)return render(request, 'home.html')

(3)不同方式数据返回

  • 在Django框架中,HttpResponseJsonResponse是两种不同的响应方式。

    • HttpResponse通常用于返回文本数据
    • JsonResponse用于返回JSON格式的数据
  • 如果后端使用HttpResponse返回数据

    • 那么数据(包括字典)将作为字符串返回,客户端(例如JavaScript)需要手动对其进行解析或反序列化。
    • 例如,如果返回的是JSON格式的字符串,那么在JavaScript中,需要使用JSON.parse()函数将其转换为JavaScript对象。
    • 或者在后端中使用json.dumps()方法将数据转换成
  • 如果后端使用JsonResponse返回数据

    • 那么Django将自动将Python字典或列表转换为JSON格式的字符串。
    • 在客户端,如果使用的是JavaScript的fetch API或jQuery的$.ajax方法(并且dataType参数被设置为'json'),那么这些函数将自动将JSON字符串转换为JavaScript对象,无需手动进行反序列化。
<script>{#等待页面加载完毕#}$(document).ready({#给按钮绑定事件#}$("#btn_result").click(function () {{#异步触发AJAX#}$.ajax({{#提交数数据路径, 和action一样#}url: "",{#提交方式#}type: "post",{#表示期望从数据库返回的数据类型(json、xml、script、html)#}dataType: "json",{#提交给后端的数据, 键值可以直接写#}data: {number1: $("#num1").val(),"number2": $("#num2").val()},{#回调函数,data是后端返回的数据#}success: function (data) {console.log(data, typeof data){#{message: 'OK', result: 7712}#}{# 'object'#}$("#result").val(data.result)}})}))
</script>
def home(request):if request.method == "POST":data = request.POSTprint(data)num1 = data.get("number1")num2 = data.get("number2")res = {"message": "OK","result": int(num1) + int(num2)}return JsonResponse(res)return render(request, 'home.html')

【三】前后端传输数据的编码格式(contentType)

  • 由于get请求数据是直接放在url后面的
    • url?username=bruce&password=123
  • 所以主要研究POST请求

【1】urlencoded

  • application/x-www-form-urlencoded(urlencoded)
    • 这是最常见的POST数据提交的方式。
    • 浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
    • 键值对都是通过**&符号分隔,键值之间等号(=**)连接。
      • 例如:key1=value1&key2=value2

【2】formdata

  • multipart/form-data(formdata)
    • 这种数据格式通常用于文件上传
    • 当表单中包含 <input type="file"> 时,就需要使用这种格式来提交表单。

【3】json

  • application/json(json)
    • 这种数据格式用于发送 JSON 格式的数据。
    • 在现代的Web应用中,这种格式越来越常见,特别是在构建 RESTful API 时。
    • form表单没有这种格式

【4】plain

  • 表单 <form>enctype 属性还可以设置为 text/plain

  • text/plain 是一种简单的数据格式

    • 它和 application/x-www-form-urlencoded 类似
    • 但是它不对字符进行URL编码
    • 这意味着,如果你的数据中包含特殊字符(例如空格、&=等),这些字符在 text/plain 格式中将保持原样,而不会被转换为URL编码。
      • 空格被转换为 +@ 被转换为 %40·
  • ext/plain 格式并不常用,因为它不进行URL编码,可能会导致数据传输过程中出现问题。

【四】AJAX传输数据编码格式

【1】request补充

(1).body

  • 在 Django 中,request.body 属性包含了 HTTP 请求的原始内容,它通常用于处理非表单数据的 POST 请求。
    • 比如,当发送 JSON、XML 或者其他类型的数据时,你会使用 request.body 来获取这些数据。
  • request.body 返回的是一个字节字符串
    • 所以如果你发送的是 JSON 数据,你需要使用 Python 的 json 模块来解析这个字节字符串
  • 需要注意的是,request.body 只能被读取一次
    • 因为它是从 socket 读取的,读取后数据就会被清空
    • 如果试图多次读取 request.body,你会得到一个空的字节字符串。
    • 如果需要多次使用请求的数据,你需要将它保存到一个变量中。
  • 要使用尽量放在最千面

(2).is_ajax()

  • is_ajax()是HttpRequest对象的一个方法

    • 它用于检查HTTP请求是否是一个AJAX请求
    • 这个方法检查HTTP请求头中的X-Requested-With字段是否为XMLHttpRequest
    • 如果是,则返回True,否则返回False
  • 需要注意的是,is_ajax()方法并不完全可靠

    • 因为它依赖于客户端设置正确的X-Requested-With头。
    • 如果一个恶意的客户端发送一个伪造的请求,并设置X-Requested-WithXMLHttpRequest,那么is_ajax()会错误地认为这是一个AJAX请求。

【2】默认格式

(1)前端界面

<button class="btn btn=success" id="b1">Click</button><script>$(document).ready($("#b1").click(function () {$.ajax({url: "",type: "post",data: {"username": "bruce", "password": "123"},success: function (args) {}})}))
</script>

(2)后端

def home(request):body = request.bodyprint(body, type(body))if request.method == "POST":data = request.POSTprint(data, type(data))return render(request, 'home.html')
# b'username=bruce&password=123' <class 'bytes'>
# <QueryDict: {'username': ['bruce'], 'password': ['123']}> <class 'django.http.request.QueryDict'>

(3)结果

  • 默认值是 'application/x-www-form-urlencoded; charset=UTF-8',这表示数据是以表单的形式提交的。
    • 特殊的字符串类型
    • 编码方式将每个键值对(key-value pair)转换为key=value的形式,并使用&符号连接多个键值对。

【3】Json格式

(1)前端页面

<button class="btn btn=success" id="b1">Click</button><script>$(document).ready($("#b1").click(function () {$.ajax({url: "",type: "post",contentType:"applications/json",data: JSON.stringify({"username": "bruce", "password": "123"}),success: function (args) {}})}))
</script>

(2)后端

def home(request):body = request.bodyprint(body, type(body))if request.method == "POST":data = request.POSTprint(data, type(data))if body:# 先解码json_str = body.decode('utf-8')# 类型转换json_dict = json.loads(json_str)print(json_dict, type(json_dict))return render(request, 'home.html')b'{"username":"bruce","password":"123"}' <class 'bytes'>
<QueryDict: {}> <class 'django.http.request.QueryDict'>
{'username': 'bruce', 'password': '123'} <class 'dict'>
# 在没有设置类型时
# b'{"username":"bruce","password":"123"}' <class 'bytes'>
# <QueryDict: {'{"username":"bruce","password":"123"}': ['']}> <class 'django.http.request.QueryDict'>

(3)结果

  • contentType:"applications/json"
    
  • 首先在没有上述设置之前

    • 默认按照urlencoded格式
    • 是特殊的字符串格式
    • 所以在POST中看到的是
      • <QueryDict: {'{"username":"bruce","password":"123"}': ['']}> <class 'django.http.request.QueryDict'>
      • 将所有的数据当成连连在一起的字符,作为一个键值传入
  • 在添加上述设置以后

    • 我们在POST中拿不到任何数据了,是一个空的querydict
    • 我们此时只能在body中拿去数据
    • 但是该数据是字节字符串
      • 所以需要先解码
      • 在使用json.loads()转换格式后
      • 才可以拿到想要的数据

【4】文件格式

(1)前端界面

<p>username: <input type="text" id="d1" name="username"></p>
<p>username: <input type="password" id="d2" name="password"></p>
<p>file: <input type="file" id="d3" name="file"></p>
<button class="btn btn-success" id="b1">submit</button><script>$("#b1").on('click', function () {{#传输文件需要内置对象formdata#}let formDataObj = new FormData();formDataObj.append('username', $("#d1").val());formDataObj.append('password', $("#d2").val());formDataObj.append('file', $("#d3")[0].files[0]);$.ajax({url: "",type: "post",data: formDataObj,{#不需要使用任何编码,django后端能自动识别formdate对象#}contentType: false,{#告诉浏览器不要对我的数据进行处理#}processData: false,success: function (args) {}})})
</script>

(2)后端

def home(request):if request.is_ajax() and request.method == "POST":print(request.POST)print(request.FILES)return render(request, 'home.html')
# <QueryDict: {'username': ['456'], 'password': ['123']}>
# <MultiValueDict: {'file': [<InMemoryUploadedFile: 53efb9d8079c6e4f904ed602f5c1e4e.png (image/png)>]}>

(3)结果

  • 想要传输文件需要

    • javascript内置对象
      • formdata
      • 可以通过append方法
      • 添加在键值对
      • 文件内容在$("#d1")[0].files[0]
    • 两个配置
      • 不使用任何编码contentType: false,后端自动识别formdata
      • 不对数据进行任何处理:processData: false
  • 后端可以通过is_ajax和post一起来判断

    • 是否是ajax的post请求
    • 文件在request.FILES
    • 其他键值对在request.POST

【五】sweetleart

【1】官网

(1)sweetleart1

  • SweetAlert1
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
  • 其他需要的资源
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>

(2)sweetleart2

  • sweetalert2 CDN by jsDelivr - A CDN for npm and GitHub

  • SweetAlert2

<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
  • 其他资源对象
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>

【2】使用

(1)弹框后跳转

<button class="btn btn-success" id="b1">submit</button><script>$("#b1").on('click', function () {Swal.fire({position: "top-end",icon: "success",title: "Your work has been saved",showConfirmButton: false,timer: 1500}).then(function () {$.ajax({type: "POST",url: "",data: "",success: function () {window.location.href = "https://www.baidu.com/";},});});});
</script>

(2)确认删除后跳转

  • 点击确认后将段落ID传递给后端
    • 后端返回可以的信息和新的地址
    • 然后自动跳转到新界面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width,initial-scale=1.0"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"><script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script><script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
</head>
<body>
<p id="p1"><button class="btn btn-success" id="b1">submit</button>
</p>
<script>$("#b1").on('click', function () {Swal.fire({title: "Are you sure?",text: "You won't be able to revert this!",icon: "warning",showCancelButton: true,confirmButtonColor: "#3085d6",cancelButtonColor: "#d33",confirmButtonText: "Yes, delete it!"}).then((result) => {if (result.isConfirmed) {var pId = $("#p1").attr("id");$.ajax({type: "POST",url: "",data: {pId: pId},success: function (response) {if (response.flag) {Swal.fire({title: "Deleted!",text: "Your file has been deleted.",icon: "success"}).then(() => {window.location.href = response.url;});}},});}});});
</script>
</body>
</html>
def home(request):if request.is_ajax() and request.method == "POST":data_dict = {"flag": True, "url": "https://www.baidu.com/"}return JsonResponse(data_dict)return render(request, 'home.html', locals())

【六】序列化组件

【0】前言

(1)为啥要用

  • 目前我们可以在后端通过models获得queryset对象

    • 然后直接用locals()直接传送给前端
  • 但是在前后端分离项目中

    • queryset对象的内容格式是多种多样的

    • 前端工程师无法简单的了解你的数据格式

    • 所以需要一种统一的格式

    • 一般都是将数据处理成列表套字典的形式

    • [{}, {}, {}...]
      

(2)模型数据准备

  • 模型
from django.db import models# Create your models here.
class User(models.Model):name = models.CharField(max_length=32)age = models.IntegerField(null=True)gender_choices = ((1, "男"),(2, "女"),(3, "保密"),)gender = models.IntegerField(choices=gender_choices, default=3)
  • 批量添加数据(后续具体讲解)
import random
from django.test import TestCase
# Create your tests here.
import osif __name__ == '__main__':"""Run administrative tasks."""os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_test.settings')import djangodjango.setup()from app01 import models
user_list = []
for i in range(5):obj = models.User(name=f"bruce{i}", age=20+i, gender=random.choice([1, 2, 3]))user_list.append(obj)
models.User.objects.bulk_create(user_list)

【1】JsonResponse

  • 后端发送数据
def home(request):user_queryset = models.User.objects.all()user_list = []for user_obj in user_queryset:user_dict = {"name": user_obj.name,"age": user_obj.age,"gender": user_obj.gender}user_list.append(user_dict)return JsonResponse(user_list, safe=False)
  • 前端拿到的数据格式
[{"name": "bruce0","age": 20,"gender": 2},{"name": "bruce1","age": 21,"gender": 1},{"name": "bruce2","age": 22,"gender": 2},{"name": "bruce3","age": 23,"gender": 3},{"name": "bruce4","age": 24,"gender": 2}
]

【2】serializers组件

  • 后端
from django.core import serializers
def home(request):user_queryset = models.User.objects.all()user_str = serializers.serialize('json', user_queryset)print(type(user_str))# <class 'str'>return HttpResponse(user_str)
  • 前端
    • 这里面的信息就更加丰富了
    • 有model、pk和fields
    • 其中fields中是模型型中的具体数据
[{"model": "app01.user", "pk": 1, "fields": {"name": "bruce0", "age": 20, "gender": 2}}, {"model": "app01.user", "pk": 2, "fields": {"name": "bruce1", "age": 21, "gender": 1}}, {"model": "app01.user", "pk": 3, "fields": {"name": "bruce2", "age": 22, "gender": 2}}, {"model": "app01.user", "pk": 4, "fields": {"name": "bruce3", "age": 23, "gender": 3}}, {"model": "app01.user", "pk": 5, "fields": {"name": "bruce4", "age": 24, "gender": 2}}]

【3】小结

  • JsonResponse
    • 为了统一的列表套字典格式
    • 需要手动创建该格式
  • serializers
    • 首先需要导入模块
    • 然后用模块转换数据格式
    • 最后HttpResponse传输数据
  • 都有的问题
    • 这里的性别在前端开来,只有三个数字
    • 不知具体含义
    • 所有都还需要有一个具体字段数值说明书

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

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

相关文章

ARIMA

一.数据平稳性与差分法 1.平稳性&#xff1a; 2.差分法&#xff1a; 错开时间点&#xff0c;使得数据可以平稳 原数据➡️一阶差分➡️二阶差分&#xff1a; 二、arima 1.自回归模型 2.移动平均模型 关注的是误差项的累积 3.arma p d(几阶差分&#xff09; q自己指定 4.总…

微信小程序button动态跳转到页面

微信小程序中如何动态的跳转到某个页面。 目录 1、首先在js文件中定义事件函数 2、在页面中进行传参调用 3、其它跳转方法简单说明 1、首先在js文件中定义事件函数 goto(e){const urle.currentTarget.dataset.url;wx.navigateTo({url: url})}, 2、在页面中进行传参调用 &l…

基于Java中的SSM框架实现考研指导平台系统项目【项目源码+论文说明】

基于Java中的SSM框架实现考研指导平台系统演示 摘要 应对考研的学生&#xff0c;为了更好的使校园考研有一个更好的环境好好的学习&#xff0c;建议一个好的校园网站&#xff0c;是非常有必要的。提供学生的学习提供一个交流的空间。帮助同学们在学习高数、学习设计、学习统计…

python usb与下位机 硬件通信

需求分析 上周接到一个需求 用usb和硬件连接 轮询读取usb中指定功能码的指定个数的数据并生成一个桌面程序 刚接到这个需求时 我第一时间想到的就是使用python去尝试 期间也踩了很多的坑 第一版效果如下 特此记录 环境搭建 首先第一点就是将所需要的库进行安装 这里是我这…

Qt——2D画图

基础画图函数 矩形 painter.drawRect(50,50,200,100); 圆角矩形 painter.drawRoundRect(50,50,200,200,50,50); xRadius和yRadius分别以矩形宽度和高度的一半的百分比指定&#xff0c;并且应该在0.0到100.0的范围内 弧线 painter.drawArc(50,50,200,200, -90*16, 90*16);…

探秘开源隐语:架构深度剖析与隐私计算技术之旅

1.隐语架构 隐语&#xff08;SecretFlow&#xff09;作为蚂蚁集团开源的可信隐私计算框架&#xff0c;其架构设计具有多层次的特点&#xff0c;虽然具体分层名称可能会根据实际描述略有差异&#xff0c;但我们可以依据已有的技术和信息对其进行结构化的拆解&#xff1a; 硬件层…

回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SAO-B…

MySQL学习笔记------SQL(1)

关系型数据库&#xff08;RDBMS&#xff09; 建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库 特点&#xff1a;使用表储存数据&#xff0c;格式统一&#xff0c;便于维护 使用SQL语言操作&#xff0c;标准统一&#xff0c;使用方便 SQL通用语法 SQL…

反序列化漏洞简单知识

目录&#xff1a; 一、概念&#xff1a; 二、反序列化漏洞原因 三、序列化漏洞的魔术方法&#xff1a; 四、反序列化漏洞防御&#xff1a; 一、概念&#xff1a; 序列化&#xff1a; Web服务器将HttpSession对象保存到文件系统或数据库中&#xff0c;需要采用序列化的…

蓝桥杯day12刷题日记

P8720 [蓝桥杯 2020 省 B2] 平面切分 思路&#xff1a;首先借用dalao的图解释一下&#xff0c;又多出一条与当前平面任意一条直线都不重合线时&#xff0c;多了的平面是交点数1&#xff0c;所以用双层循环每次往里面加一条直线&#xff0c;计算交点 #include <iostream>…

STM32--RC522学习记录

一&#xff0c;datasheet阅读记录 1.关于通信格式 2.读寄存器 u8 RC522_ReadReg(u8 address) {u8 addr address;u8 data0x00;addr((addr<<1)&0x7e)|0x80;//将最高位置一表示read&#xff0c;最后一位按照手册建议变为0Spi_Start();//选中从机SPI2_ReadWriteByte(ad…

STM32之HAL开发——HAL库框架介绍

HAL库外设设计思想 HAL库借鉴面向对象的设计思想&#xff0c;将外设驱动封装为对象。 HAL库使用主线 HAL使用的主要用在俩个地方&#xff0c;无外乎外设初始化以及外设的使用。想用好这两个功能&#xff0c;我们首先得对外设的封装有一定的了解。 句柄结构体 xx_HandleTypeDef…

[Java基础揉碎]final关键字

目录 介绍 在某些情况下&#xff0c;程序员可能有以下需求&#xff0c;就会使用到final final注意事项和讨论细节 1) final修饰的属性又叫常量&#xff0c;一般用XX_XX_XX来命名 2) final修饰的属性在定义时&#xff0c;必须赋初值&#xff0c;并且以后不能再修改&#…

国内IP地址和网关的定义与作用

在国内网络通信系统中&#xff0c;IP地址和网关扮演着至关重要的角色&#xff0c;它们相互配合&#xff0c;构成了连接各种网络设备和实现数据传输的基础。虎观代理小二将深入探讨国内IP地址和网关的定义、作用以及在网络通信中的重要性。 1. IP地址的作用和特点 IP地址定义&am…

python绘图matplotlib——使用记录1

本博文来自于网络收集&#xff0c;如有侵权请联系删除 使用matplotlib绘图 1 常用函数汇总1.1 plot1.2 legend1.3 scatter1.4 xlim1.5 xlabel1.6 grid1.7 axhline1.7 axvspan1.8 annotate1.9 text1.10 title 2 常见图形绘制2.1 bar——柱状图2.2 barh——条形图2.3 hist——直…

python第三方库的安装,卸载和更新,以及在cmd下pip install安装的包在pycharm不可用问题的解决

目录 第三方库pip安装&#xff0c;卸载更新 1.安装&#xff1a; 2.卸载 3.更新 一、第三方库pip安装&#xff0c;卸载更新 1.安装 pip install 模块名 加镜像下载&#xff1a;pip install -i 镜像网址模块名 常用的是加清华镜像&#xff0c;如 pip install -i https://pyp…

农夫山泉2024财报即将公布,首富地位恐难撼动,巨额利润或将流失海外

农夫山泉2024财报即将公布&#xff0c;首富地位恐难撼动&#xff0c;巨额利润或将流失海外 2024年3月26日&#xff0c;农夫山泉新一年的财报即将公布&#xff0c;根据现有的经济数据分析&#xff0c;农夫山泉此次财报应该不会受到近期负面事件的影响&#xff0c;钟晱晱的首富地…

JavaEE企业级分布式高级架构师课程

教程介绍 本课程主要面向1-5年及以上工作经验的Java工程师&#xff0c;大纲由IT界知名大牛 — 廖雪峰老师亲自打造&#xff0c;由来自一线大型互联网公司架构师、技术总监授课&#xff0c;内容涵盖深入spring5设计模式/高级web MVC开发/高级数据库设计与开发/高级响应式web开发…

stm32学习-vs1053使用

1.基本概念 vs1053是一款音频解码芯片&#xff0c;通过SPI不断输入音频数据&#xff0c;vs1053自动解码。 引脚说明 常用命令寄存器 码率&#xff1a;每秒数据数&#xff0c;单位一般为bit&#xff0c;越高越保真 2.配置流程 3.使用流程 4.问题总结 1.不能一次性从sd卡中读…

马斯克开源的 grok-1 底层 Transformer 模型论文 《Attention is All You Need》

拓展阅读 马斯克开源的 grok-1 底层 Transformer 模型论文 《Attention is All You Need》 马斯克开源的 grok-1 大模型底层 Transformer 模型到底是个啥&#xff1f; 马斯克开源的 grok-1 大模型硬核源码第 1 弹 马斯克开源的 grok-1 大模型硬核源码第 2 弹 马斯克开源的…