Django REST Framework視圖

Django REST Framework (DRF) 視圖類詳解

DRF 提供了豐富的視圖類來構建 API,從基礎到高級,滿足不同復雜度的需求。以下是 DRF 的主要視圖類及其使用場景:

1. 基礎視圖類

APIView

所有 DRF 視圖的基類,相當于 Django 的 View 類的增強版。

from rest_framework.views import APIView
from rest_framework.response import Responseclass ArticleAPIView(APIView):def get(self, request):articles = Article.objects.all()serializer = ArticleSerializer(articles, many=True)return Response(serializer.data)def post(self, request):serializer = ArticleSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=201)return Response(serializer.errors, status=400)

特點:

  • 提供了 Django View 的所有功能

  • 增加了 DRF 的請求/響應處理

  • 內置了認證、權限、限流等機制

2. 通用視圖類 (Generic Views)

GenericAPIView

擴展了 APIView,增加了常見的列表和詳情視圖行為。

from rest_framework.generics import GenericAPIViewclass ArticleList(GenericAPIView):queryset = Article.objects.all()serializer_class = ArticleSerializerdef get(self, request):queryset = self.get_queryset()serializer = self.get_serializer(queryset, many=True)return Response(serializer.data)

具體通用視圖

DRF 提供了5個具體的通用視圖類:

  1. ListAPIView?- 只讀列表

    from rest_framework.generics import ListAPIViewclass ArticleList(ListAPIView):queryset = Article.objects.all()serializer_class = ArticleSerializer

  2. RetrieveAPIView?- 只讀單個實例

    from rest_framework.generics import RetrieveAPIViewclass ArticleDetail(RetrieveAPIView):queryset = Article.objects.all()serializer_class = ArticleSerializer

  3. CreateAPIView?- 只創建

    from rest_framework.generics import CreateAPIViewclass ArticleCreate(CreateAPIView):queryset = Article.objects.all()serializer_class = ArticleSerializer

  4. UpdateAPIView?- 只更新

    from rest_framework.generics import UpdateAPIViewclass ArticleUpdate(UpdateAPIView):queryset = Article.objects.all()serializer_class = ArticleSerializer

  5. DestroyAPIView?- 只刪除

    from rest_framework.generics import DestroyAPIViewclass ArticleDelete(DestroyAPIView):queryset = Article.objects.all()serializer_class = ArticleSerializer

組合通用視圖

  1. ListCreateAPIView?- 列表 + 創建

    from rest_framework.generics import ListCreateAPIViewclass ArticleListCreate(ListCreateAPIView):queryset = Article.objects.all()serializer_class = ArticleSerializer
  2. RetrieveUpdateAPIView?- 詳情 + 更新

    from rest_framework.generics import RetrieveUpdateAPIViewclass ArticleRetrieveUpdate(RetrieveUpdateAPIView):queryset = Article.objects.all()serializer_class = ArticleSerializer
  3. RetrieveDestroyAPIView?- 詳情 + 刪除

    from rest_framework.generics import RetrieveDestroyAPIViewclass ArticleRetrieveDestroy(RetrieveDestroyAPIView):queryset = Article.objects.all()serializer_class = ArticleSerializer
  4. RetrieveUpdateDestroyAPIView?- 詳情 + 更新 + 刪除

    from rest_framework.generics import RetrieveUpdateDestroyAPIViewclass ArticleRUD(RetrieveUpdateDestroyAPIView):queryset = Article.objects.all()serializer_class = ArticleSerializer

3. 視圖集 (ViewSets)

ViewSet

將多個視圖邏輯組合到一個類中。

from rest_framework.viewsets import ViewSetclass ArticleViewSet(ViewSet):def list(self, request):queryset = Article.objects.all()serializer = ArticleSerializer(queryset, many=True)return Response(serializer.data)def retrieve(self, request, pk=None):article = get_object_or_404(Article, pk=pk)serializer = ArticleSerializer(article)return Response(serializer.data)

GenericViewSet

結合了 GenericAPIView 和 ViewSet 的行為。

from rest_framework.viewsets import GenericViewSetclass ArticleViewSet(GenericViewSet):queryset = Article.objects.all()serializer_class = ArticleSerializerdef list(self, request):queryset = self.get_queryset()serializer = self.get_serializer(queryset, many=True)return Response(serializer.data)

ModelViewSet

提供完整的 CRUD 操作。

from rest_framework.viewsets import ModelViewSetclass ArticleViewSet(ModelViewSet):queryset = Article.objects.all()serializer_class = ArticleSerializer# 自動獲得 list, create, retrieve, update, destroy 方法

ReadOnlyModelViewSet

只提供只讀操作。

from rest_framework.viewsets import ReadOnlyModelViewSetclass ArticleViewSet(ReadOnlyModelViewSet):queryset = Article.objects.all()serializer_class = ArticleSerializer# 自動獲得 list 和 retrieve 方法

4. 自定義動作

可以在 ViewSet 中添加自定義路由和方法:

from rest_framework.decorators import action
from rest_framework.response import Responseclass ArticleViewSet(ModelViewSet):queryset = Article.objects.all()serializer_class = ArticleSerializer@action(detail=True, methods=['post'])def publish(self, request, pk=None):article = self.get_object()article.published = Truearticle.save()return Response({'status': 'published'})@action(detail=False)def recent(self, request):recent_articles = Article.objects.order_by('-created_at')[:5]serializer = self.get_serializer(recent_articles, many=True)return Response(serializer.data)

5. 其他特殊視圖

mixins

可以組合使用的混合類:

  1. ListModelMixin?- 提供列表功能

  2. CreateModelMixin?- 提供創建功能

  3. RetrieveModelMixin?- 提供詳情功能

  4. UpdateModelMixin?- 提供更新功能

  5. DestroyModelMixin?- 提供刪除功能

from rest_framework import mixins
from rest_framework.viewsets import GenericViewSetclass ArticleViewSet(mixins.ListModelMixin,mixins.CreateModelMixin,GenericViewSet):queryset = Article.objects.all()serializer_class = ArticleSerializer

視圖選擇指南

  1. 簡單API:使用 APIView 或 GenericAPIView

  2. 標準CRUD:使用通用視圖 (ListCreateAPIView 等) 或 ModelViewSet

  3. 只讀API:使用 ReadOnlyModelViewSet

  4. 需要自定義行為:使用 ViewSet 或 GenericViewSet 配合 mixins

  5. 復雜邏輯:從 APIView 繼承并自行實現

路由配置示例

# 對于 ViewSet
from rest_framework.routers import DefaultRouterrouter = DefaultRouter()
router.register(r'articles', ArticleViewSet)urlpatterns = [path('', include(router.urls)),
]# 對于通用視圖
urlpatterns = [path('articles/', ArticleList.as_view()),path('articles/<int:pk>/', ArticleDetail.as_view()),
]

DRF 的視圖系統非常靈活,可以根據項目需求選擇合適的視圖類,從簡單到復雜都能很好地支持。

應用示例

創建一個django項目

創建 Django 項目
django-admin startproject test_restcd test_rest
創建應用
python manage.py startapp myapp

?下載

pip install djangorestframework

django項目注釋掉一些不需要的,然后注冊rest_framework

注釋INSTALLED_APPS,MIDDLEWARE,TEMPLATES里自帶的一些內容

#settings.py"""
Django settings for test_rest project.Generated by 'django-admin startproject' using Django 5.2.5.For more information on this file, see
https://docs.djangoproject.com/en/5.2/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.2/ref/settings/
"""from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-!07)9y63bmcjs7__+me1a^sirkne20g1lz37bqrt&rt#%(5g1h'# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_APPS = [# 'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes',# 'django.contrib.sessions',# 'django.contrib.messages','django.contrib.staticfiles',"rest_framework"
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware',#'django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware',# 'django.contrib.auth.middleware.AuthenticationMiddleware',# 'django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'test_rest.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.request',# 'django.contrib.auth.context_processors.auth',# 'django.contrib.messages.context_processors.messages',],},},
]WSGI_APPLICATION = 'test_rest.wsgi.application'# Database
# https://docs.djangoproject.com/en/5.2/ref/settings/#databasesDATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}# Password validation
# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# Internationalization
# https://docs.djangoproject.com/en/5.2/topics/i18n/LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.2/howto/static-files/STATIC_URL = 'static/'# Default primary key field type
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

Django REST Framework (DRF) 中的 FBV 與 CBV

FBV(Function-Based Views,函數基礎視圖)和 CBV(Class-Based Views,類基礎視圖)是 Django 和 Django REST Framework (DRF) 中實現視圖邏輯的兩種主要方式。

test_rest/urls.py"""
URL configuration for test_rest project.The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/5.2/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.urls import path,include
from myapp import viewsurlpatterns = [path('auth/',views.auth), #FBVpath('myview/',views.MyView.as_view()),#CBVpath('info/',views.MyView.as_view()),#CBV]
/myapp/views.py
from django.http import JsonResponse
from django.views import View
from rest_framework.views import APIView
from rest_framework.response import Responsedef auth(request):if request.method == "GET":return JsonResponse({"status":True,'message':'success',"method":request.method})elif request.method == "POST":return JsonResponse({"status":True,'message':'success',"method":request.method})return JsonResponse({"status":False,"method":request.method})class MyView(View):def get(self,request):return JsonResponse({"status":True,'message':'success',"method":request.method})def post(self,request):return JsonResponse({"status":True,'message':'success',"method":request.method})def put(self,request):return JsonResponse({"status":True,'message':'success',"method":request.method})def delete(self,request):return JsonResponse({"status":True,'message':'success',"method":request.method})class InfoView(APIView):def get(self,request):return Response({"status":True,'message':'success',"method":request.method})

Django REST Framework (DRF) 視圖類詳解

DRF 提供了豐富的視圖類來構建 API,從基礎到高級,滿足不同復雜度的需求。以下是 DRF 的主要視圖類及其使用場景:

開始前咱們先創建一個數據庫,模型類,然后遷移數據

?一、MySQL 數據庫配置

1. 安裝 MySQL 驅動
pip install mysqlclient  # 推薦
# 或
pip install pymysql
2. 創建 MySQL 數據庫
CREATE DATABASE backstage CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3. 配置 Django 的 settings.py
# settings.py
DATABASES = {'default': {  # 默認數據庫配置(Django 支持多數據庫配置)'ENGINE': 'django.db.backends.mysql',  # 指定使用 MySQL 后端'NAME': 'backstage',                   # 數據庫名(需提前創建)'USER': 'your_username',               # MySQL 用戶名'PASSWORD': 'your_password',           # MySQL 密碼'HOST': 'localhost',                   # 數據庫服務器地址(默認本地)'PORT': '3306',                        # MySQL 默認端口'OPTIONS': {                           # 額外選項(關鍵配置)'charset': 'utf8mb4',              # 字符集設置為 utf8mb4'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",  # 初始化 SQL 命令}}
}

?二、創建商品模型

定義模型(myapp/models.py)
from django.db import models
from django.core.validators import MinValueValidatorclass SpecificationCategory(models.Model):"""規格類目表"""id = models.AutoField(primary_key=True, verbose_name="商品ID")name = models.CharField(max_length=50, verbose_name="規格類目名稱")cid = models.CharField(max_length=50, verbose_name="類目編號")class Meta:db_table = 'spec_category'verbose_name = '商品規格類目'verbose_name_plural = verbose_namedef __str__(self):return self.nameclass Product(models.Model):"""商品表"""id = models.AutoField(primary_key=True, verbose_name="商品ID")price = models.DecimalField(max_digits=10,decimal_places=2,validators=[MinValueValidator(0)],verbose_name="商品價格")stock = models.PositiveIntegerField(default=0, verbose_name="商品庫存")# 一對多關聯規格類目spec_category = models.ForeignKey(SpecificationCategory,on_delete=models.PROTECT,related_name='products',  # 注意改為復數形式verbose_name="規格類目")image = models.CharField(max_length=500,blank=True,null=True,verbose_name="商品主圖URL")selling_points = models.CharField(max_length=200,blank=True,verbose_name="商品賣點")description = models.TextField(verbose_name="商品詳情描述")# 自動記錄時間created_at = models.DateTimeField(auto_now_add=True, verbose_name="創建時間")updated_at = models.DateTimeField(auto_now=True, verbose_name="更新時間")class Meta:db_table = 'product'verbose_name = '商品信息'verbose_name_plural = verbose_nameordering = ['-created_at']def __str__(self):return f"商品{self.id}(庫存:{self.stock})"

?三、數據庫遷移

注意要在settings.py里注冊app哦

1. 生成遷移文件
python manage.py makemigrations myapp
2. 查看生成的SQL(可選)
python manage.py sqlmigrate myapp 0001
3. 執行遷移
python manage.py migrate

示例

?1. 首先創建序列化器

在?serializers.py?中:

from rest_framework import serializers
from .models import Product, SpecificationCategoryclass SpecificationCategorySerializer(serializers.ModelSerializer):class Meta:model = SpecificationCategoryfields = ['id', 'name', 'cid']class ProductSerializer(serializers.ModelSerializer):# 保留只讀的嵌套表示spec_category = SpecificationCategorySerializer(read_only=True)# 改為只接受spec_category的IDspec_category_id = serializers.PrimaryKeyRelatedField(queryset=SpecificationCategory.objects.all(),source='spec_category',write_only=True)class Meta:model = Productfields = ['id', 'price', 'stock', 'spec_category','image', 'selling_points', 'description','created_at', 'updated_at']read_only_fields = ['created_at', 'updated_at']

APIView 使用示例

2. 創建 APIView 視圖

在?views.py?中:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Product
from .serializers import ProductSerializer
from django.shortcuts import get_object_or_404class ProductAPIView(APIView):"""商品API視圖,支持列表獲取和創建"""def get(self, request, format=None):"""獲取所有商品列表"""products = Product.objects.all()serializer = ProductSerializer(products, many=True)return Response(serializer.data)def post(self, request, format=None):"""創建新商品"""serializer = ProductSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=status.HTTP_201_CREATED)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)class ProductDetailAPIView(APIView):"""商品詳情API視圖,支持檢索、更新和刪除單個商品"""def get_object(self, pk):return get_object_or_404(Product, pk=pk)def get(self, request, pk, format=None):"""獲取單個商品詳情"""product = self.get_object(pk)serializer = ProductSerializer(product)return Response(serializer.data)def put(self, request, pk, format=None):"""更新整個商品信息"""product = self.get_object(pk)serializer = ProductSerializer(product, data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)def patch(self, request, pk, format=None):"""部分更新商品信息"""product = self.get_object(pk)serializer = ProductSerializer(product, data=request.data, partial=True)if serializer.is_valid():serializer.save()return Response(serializer.data)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)def delete(self, request, pk, format=None):"""刪除商品"""product = self.get_object(pk)product.delete()return Response(status=status.HTTP_204_NO_CONTENT)
3. 配置 URL 路由

在?urls.py?中:

from django.urls import path
from myapp.views import ProductAPIView,ProductDetailAPIViewurlpatterns = [path('products/', ProductAPIView.as_view(), name='product-list'),path('products/<int:pk>/', ProductDetailAPIView.as_view(), name='product-detail'),
]

訪問:

ViewSets的ModelViewSet示例

?2. 創建 APIView 視圖

在?views.py?中:

from .models import Product,SpecificationCategory
from .serializers import ProductSerializer,SpecificationCategorySerializer
from rest_framework import viewsetsclass SpecificationCategoryViewSet(viewsets.ModelViewSet):queryset = SpecificationCategory.objects.all()serializer_class = SpecificationCategorySerializerclass ProductViewSet(viewsets.ModelViewSet):queryset = Product.objects.all()serializer_class = ProductSerializer
3. 配置 URL 路由

在?urls.py?中:

from django.urls import path, include
from myapp.views import *
from rest_framework.routers import DefaultRouterrouter = DefaultRouter()
router.register('spec-categories', SpecificationCategoryViewSet)
router.register('products_view', ProductViewSet)
urlpatterns = [path('api/', include(router.urls)),  # 注意這里包含了路由
]

訪問:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95484.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95484.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95484.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux面試題及詳細答案 120道(1-15)-- 基礎概念

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

week1-[分支結構]中位數

week1-[分支結構]中位數 題目描述 給定 444 個正整數 a,b,c,da,b,c,da,b,c,d&#xff0c;輸出它們的中位數&#xff0c;答案四舍五入保留 111 位小數。 輸入格式 輸入共 111 行 444 個正整數 a,b,c,da,b,c,da,b,c,d。 輸出格式 輸出共 111 行 111 個浮點數表示答案。 樣例 #1 樣…

[激光原理與應用-259]:理論 - 幾何光學 - 平面鏡的反射、平面透鏡的折射、平面鏡的反射成像、平面透鏡的成像的規律

一、平面鏡的反射規律平面鏡的反射遵循鏡面反射定律&#xff0c;即光線在光滑表面&#xff08;反射面平整度遠大于波長&#xff09;發生反射時&#xff0c;滿足以下條件&#xff1a;反射光線、入射光線與法線共面&#xff1a;反射光線、入射光線和法線&#xff08;垂直于反射面…

相機按鍵功能解析

相機按鍵功能解析佳能相機按鍵機身背面機身正面機身頂部機身側面 佳能相機按鍵 機身背面取景器目鏡&#xff1a;用于拍攝時觀察相機形成的圖像。實拍顯示/視頻拍攝按鈕&#xff1a;按下即可開始拍攝或錄制視頻。光圈/曝光補償鍵&#xff1a;調整光圈大小和曝光補償&#xff0c;…

51單片機-驅動LED模塊教程

本章思維導圖&#xff1a; 51單片機驅動LED燈模塊 LED燈元器件簡介 LED&#xff08;Light Emitting Diode&#xff0c;發光二極管&#xff09; 是一種固態半導體器件&#xff0c;通過P-N結中電子與空穴復合直接將電能轉化為光能。其核心結構由P型半導體&#xff08;空穴主導&a…

Git 完全手冊:從入門到團隊協作實戰(2)

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《C修煉之路》、《Linux修煉&#xff1a;終端之內 洞悉真理…

c語言中堆和棧的區別

1.棧區(stack):由編譯器自動分配釋放&#xff0c;棧主要用于存儲局部變量、函數參數、函數調用和返回信息等。其操作方式類似于數據結構中的棧。 2.堆區(heap):一般由程序員分配釋放&#xff0c;若程序員不釋放&#xff0c;則可能會引起內存泄漏。注堆和數據結構中的堆棧不一樣…

華為實驗WLAN 基礎配置隨練

業務vlan 20 192.168.20.x管理vlan 100 192.168.100.x步驟① 網絡互通Core sw:vlan batch 20 100 dhcp enable int vlanif 20IP add 192.168.20.1 24dhcp select interfaceinterface GigabitEthernet0/0/1/2port link-type trunkport trunk pvid vlan 100port trunk allow-pas…

CMake 如何查找 Python2和Python3

問題 在一個CMakeLists.txt文件里面看到了下面的這句話 find_package(Python2 COMPONENTS Interpreter Development NumPy)這個好有趣啊&#xff0c;Python2也是一個C的庫嗎&#xff0c;也有Python2Config.cmake或者FindPython2.cmake? 回答 find_package(Python2 COMPONENTS …

心靈筆記:刻意練習

心靈筆記&#xff1a;刻意練習提要 所有人都以為“杰出”源于“天賦”&#xff0c;而“天才”卻說&#xff1a;我的成就源于“正確的練習”&#xff01; 定義&#xff1a;刻意練習是一種有目的、有方法、能帶來能力持續提升的結構化訓練方式&#xff0c;它并非簡單的重復勞動&a…

langchain入門筆記03:使用fastapi部署本地大模型后端接口,優化局域網內的問答響應速度

文章目錄前言一、fastapi的簡單入門1&#xff1a;安裝必要的包&#xff08;python3.11&#xff09;&#xff1a;2&#xff1a;快速搭建一個fastapi&#xff1a;二、提升問答的響應速度1. fastapi部署后端接口&#xff0c;在局域網內訪問的方法2. 局域網內的測試&#xff1a;“未…

【CDA 新一級】學習筆記第1篇:數據分析的時代背景

作者&#xff1a;CDA持證人 張九領我們要學習數據分析&#xff0c;就要從當前時代的數據特點&#xff0c;找到在時代特點下企業需要數據分析的痛點&#xff0c;然后理解數據分析在企業中的作用。當前時代&#xff0c;數據分析的特征是哪些呢&#xff1f;我們用VUCA來概括數據分…

Vite 為什么比 Webpack 快?原理深度分析

Hi&#xff0c;我是布蘭妮甜 &#xff01;在現代前端開發中&#xff0c;構建工具的性能直接影響開發體驗和生產力。Webpack 作為傳統打包工具的代表&#xff0c;長期以來主導著前端構建領域&#xff0c;而 Vite 作為新一代的前端構建工具&#xff0c;憑借其出色的開發服務器啟動…

數字電路上的通訊速度是越快越好還是越慢越好?

昨天我突發奇想&#xff0c;修改了一下MCU和INA226以及DAC8551的通訊速率。之前的INA226用的是I2C通訊&#xff0c;之前設置的速率是100Kbps&#xff0c;DAC8551是SPI通訊&#xff0c;速率是10Mbps&#xff0c;昨天修改之前輸出位置的測試結果如圖&#xff1a;可以看到&#xf…

Google Gemini 的深度研究終于進入 API 階段

Google Gemini 最強大的功能之一是深度研究&#xff0c;但到目前為止&#xff0c;它一直嚴格限制在 Gemini 界面上。這種情況可能很快就會改變。 通過 Gemini 中的深度研究&#xff0c;您可以搜索幾乎任何內容&#xff0c;包括學者、現有研究論文等。 谷歌將深度研究描述為一…

通過beeware制作安卓apk用于獲取cpolar網址

我們都知道&#xff0c;沒有付費的cpolar用戶&#xff0c;要不時更新cpolar網址。每次都要自己登錄去獲取遠程的cpolar個人網址比較麻煩&#xff0c;好在可以用python去自動獲取。這里說的是&#xff0c;比如用手機裝termux軟件&#xff0c;再在termux中裝cpolar&#xff0c;然…

Swift 實戰:用鏈表和哈希表寫出高性能的貪吃蛇引擎(LeetCode 353)

文章目錄摘要描述解決方案解析問題與解決方案關鍵細節逐條講示例與運行結果時間復雜度空間復雜度總結摘要 這題的目標是設計一個“貪吃蛇”核心引擎&#xff1a;給定棋盤大小和一串食物位置&#xff0c;支持不斷調用 move(direction) 推進游戲&#xff0c;返回當前分數&#x…

2025-08-15:按對角線進行矩陣排序。用go語言,給你一個 n × n 的整數矩陣,要求返回一個按下面規則調整后的矩陣: - 將每一條與主對角線平行的斜線視為一個序列。對于位于主對角線及其下方的

2025-08-15&#xff1a;按對角線進行矩陣排序。用go語言&#xff0c;給你一個 n n 的整數矩陣&#xff0c;要求返回一個按下面規則調整后的矩陣&#xff1a;將每一條與主對角線平行的斜線視為一個序列。對于位于主對角線及其下方的那些斜線&#xff08;即所在位置的行索引 ≥ …

MySQL相關概念和易錯知識點(5)(索引、事務、MVCC)

目錄1.索引&#xff08;1&#xff09;局部性原理a.局部性原理在計算機中的地位b.pagec.池化技術&#xff08;Buffer Pool&#xff09;&#xff08;2&#xff09;如何理解索引&#xff08;3&#xff09;索引的原理a.page的構成b.多層目錄c.基于B樹的索引①B樹的特性在索引中的作…

SQLite 子查詢

SQLite 子查詢 SQLite 是一個輕量級的數據庫管理系統&#xff0c;廣泛應用于移動設備、嵌入式系統和桌面應用。在處理復雜的查詢時&#xff0c;子查詢&#xff08;Subquery&#xff09;是SQLite數據庫查詢語言中的一個強大工具。本文將詳細介紹SQLite子查詢的概念、用法及其在數…