【Python3-Django】快速掌握DRF:ModelViewSet實戰指南

DRF講解

1. 什么是 Django 和 Django REST Framework?

在深入 ModelViewSet 之前,我們先簡單了解一下背景知識:

  • Django 是一個基于 Python 的 Web 開發框架,旨在幫助開發者快速構建安全、可擴展的 Web 應用。它遵循“不要重復自己”(DRY)和“快速開發”的原則,提供了許多內置功能,比如 ORM(對象關系映射)、用戶認證、模板引擎等。
  • Django REST Framework (DRF) 是 Django 的擴展庫,專門用于構建 RESTful API。它讓開發者可以輕松地將 Django 模型轉換為 API 端點,供前端或其他服務調用。
  • ViewSet 是 DRF 提供的一種高級視圖類,ModelViewSet 是其中最常用的子類,用于處理模型的 CRUD(創建、讀取、更新、刪除)操作。

2. 什么是 ModelViewSet

ModelViewSet 是 Django REST Framework 中的一個類,位于 rest_framework.viewsets 模塊。它是一個高度抽象的工具,集成了處理模型數據的所有常見操作(CRUD),讓你只需編寫很少的代碼,就能實現完整的 API 功能。

核心特點:

  • 自動生成 CRUD 端點ModelViewSet 自動為你的模型提供以下 HTTP 方法對應的操作:
    • GET:列表(list)和詳情(retrieve
    • POST:創建(create
    • PUT/PATCH:更新(update/partial_update
    • DELETE:刪除(destroy
  • 代碼簡潔:通過繼承 ModelViewSet,你只需指定模型和序列化器(Serializer),就能自動生成這些功能。
  • 靈活性:可以自定義行為,比如添加權限、過濾、排序等。

3. 使用 ModelViewSet 的步驟

創建一個簡單的“任務管理”應用,包含任務(Task)的增刪改查功能。

3.1 準備工作

環境要求
  • 已安裝 Python 3(推薦 3.8 或更高版本)
  • 已安裝 Django 和 Django REST Framework:
    pip install django djangorestframework
    
創建 Django 項目
  1. 創建一個新的 Django 項目:
    django-admin startproject task_manager
    cd task_manager
    
  2. 創建一個 Django 應用:
    python manage.py startapp tasks
    
  3. tasks 應用和 rest_framework 添加到 task_manager/settings.pyINSTALLED_APPS 中:
    INSTALLED_APPS = [...'rest_framework','tasks',
    ]
    

3.2 定義模型

tasks/models.py 中定義一個簡單的 Task 模型:

from django.db import modelsclass Task(models.Model):title = models.CharField(max_length=200)description = models.TextField(blank=True)completed = models.BooleanField(default=False)created_at = models.DateTimeField(auto_now_add=True)def __str__(self):return self.title
  • 解釋
    • title:任務的標題,最大長度 200 個字符。
    • description:任務描述,允許為空。
    • completed:是否完成,默認為 False
    • created_at:創建時間,自動設置為當前時間。
    • __str__:返回任務的字符串表示,便于調試。

運行遷移命令以創建數據庫表:

python manage.py makemigrations
python manage.py migrate

3.3 創建序列化器(Serializer)

序列化器負責將模型數據轉換為 JSON 格式(或從 JSON 轉換為模型)。在 tasks/serializers.py 中創建:

from rest_framework import serializers
from .models import Taskclass TaskSerializer(serializers.ModelSerializer):class Meta:model = Taskfields = ['id', 'title', 'description', 'completed', 'created_at']
  • 解釋
    • ModelSerializer 是 DRF 提供的類,自動根據模型生成序列化邏輯。
    • Meta 類指定關聯的模型(Task)和需要序列化的字段。
    • fields 列出要包含的字段,id 是 Django 模型自動生成的。

3.4 創建 ModelViewSet

tasks/views.py 中定義 ModelViewSet

from rest_framework import viewsets
from .models import Task
from .serializers import TaskSerializerclass TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.all()serializer_class = TaskSerializer
  • 解釋
    • queryset:指定視圖使用的查詢集,這里是所有 Task 對象。
    • serializer_class:指定序列化器,用于處理輸入輸出數據。
    • ModelViewSet 自動提供了 listretrievecreateupdatepartial_updatedestroy 方法。

3.5 配置路由

為了讓 API 可訪問,需要將 TaskViewSet 注冊到路由中。在 task_manager/urls.py 中:

from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from tasks.views import TaskViewSet# 創建路由器并注冊 ViewSet
router = DefaultRouter()
router.register(r'tasks', TaskViewSet)urlpatterns = [path('admin/', admin.site.urls),path('api/', include(router.urls)),
]
  • 解釋
    • DefaultRouter 是 DRF 提供的工具,自動為 ModelViewSet 生成 URL 路由。
    • router.register 注冊 TaskViewSet,并將 URL 前綴設為 tasks
    • include(router.urls) 將路由納入主 URL 配置,API 端點將以 /api/tasks/ 開頭。

3.6 測試 API

  1. 啟動 Django 開發服務器:
    python manage.py runserver
    
  2. 訪問 http://127.0.0.1:8000/api/tasks/,你會看到 DRF 提供的交互式 API 界面。
  3. 測試以下功能:
    • GET /api/tasks/:列出所有任務。
    • POST /api/tasks/:創建新任務(通過 JSON 提交 {"title": "新任務", "description": "描述", "completed": false})。
    • GET /api/tasks/1/:獲取 ID 為 1 的任務詳情。
    • PUT /api/tasks/1/:更新 ID 為 1 的任務。
    • DELETE /api/tasks/1/:刪除 ID 為 1 的任務。

4. 深入理解 ModelViewSet

4.1 ModelViewSet 的默認行為

ModelViewSet 繼承了多個 Mixin 類,提供了以下方法:

方法HTTP 方法功能URL 示例
listGET返回所有對象的列表/api/tasks/
retrieveGET返回單個對象的詳情/api/tasks/1/
createPOST創建新對象/api/tasks/
updatePUT更新現有對象(整體更新)/api/tasks/1/
partial_updatePATCH部分更新對象/api/tasks/1/
destroyDELETE刪除對象/api/tasks/1/

這些方法由 ModelViewSet 自動實現,你無需手動編寫。


4.2 自定義 ModelViewSet

雖然 ModelViewSet 提供了默認實現,但你可以通過重寫方法或添加屬性來自定義行為。以下是一些常見自定義場景:

示例 1:添加權限控制

限制只有登錄用戶可以訪問 API。在 tasks/views.py 中:

from rest_framework import viewsets, permissions
from .models import Task
from .serializers import TaskSerializerclass TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.all()serializer_class = TaskSerializerpermission_classes = [permissions.IsAuthenticated]  # 要求登錄
  • 解釋permission_classes 指定只有通過認證的用戶才能訪問 API。
  • 需要在 settings.py 中啟用認證:
    REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework.authentication.SessionAuthentication','rest_framework.authentication.BasicAuthentication',],
    }
    
示例 2:過濾查詢集

只顯示當前用戶的任務:

class TaskViewSet(viewsets.ModelViewSet):serializer_class = TaskSerializerpermission_classes = [permissions.IsAuthenticated]def get_queryset(self):return Task.objects.filter(owner=self.request.user)
  • 解釋:重寫 get_queryset 方法,根據當前用戶過濾任務。
  • 需要在 Task 模型中添加 owner 字段:
    from django.contrib.auth.models import User
    class Task(models.Model):owner = models.ForeignKey(User, on_delete=models.CASCADE)...
    
示例 3:自定義序列化器行為

假設你想在 list 操作時只返回部分字段:

class TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.all()def get_serializer_class(self):if self.action == 'list':return TaskListSerializer  # 自定義序列化器return TaskSerializerclass TaskListSerializer(serializers.ModelSerializer):class Meta:model = Taskfields = ['id', 'title']  # 僅返回 id 和 title
  • 解釋get_serializer_class 允許根據請求類型(action)動態選擇序列化器。

6. 常見問題解答

Q1:為什么使用 ModelViewSet 而不是普通視圖?
A:ModelViewSet 提供了開箱即用的 CRUD 功能,減少重復代碼。對于快速開發 API 或原型,它非常高效。如果需要更多自定義,可以使用普通的 APIViewGenericAPIView

Q2:如何處理復雜的 API 邏輯?
A:可以重寫 ModelViewSet 的方法(如 createupdate)或使用自定義動作(@action 裝飾器)。

Q3:如何學習更多高級功能?
A:學習 DRF 的權限、過濾、分頁和認證系統。嘗試實現 token 認證(使用 rest_framework.authtoken 或 JWT)。


在這里插入圖片描述

面試題

簡單題目 (2 道)

1. 什么是 ModelViewSet,它在 Django REST Framework 中有什么作用?

問題描述:請簡要說明 ModelViewSet 的定義以及它在構建 API 時的主要功能。

答案提示

  • ModelViewSet 是 Django REST Framework 提供的一個高級視圖類,繼承自 GenericViewSet 和多個 Mixin(如 CreateModelMixinListModelMixin 等)。
  • 它自動為模型提供 CRUD 操作(創建、讀取、更新、刪除)的 API 端點。
  • 通過指定 querysetserializer_class,可以快速生成 RESTful API。
  • 示例:class TaskViewSet(viewsets.ModelViewSet): queryset = Task.objects.all(); serializer_class = TaskSerializer

考察點:理解 ModelViewSet 的基本概念和用途。


2. 如何為 ModelViewSet 配置路由?

問題描述:說明如何使用 Django REST Framework 的路由器(Router)為 ModelViewSet 配置 URL 路由,并提供代碼示例。

答案提示

  • 使用 rest_framework.routers.DefaultRouter 創建路由器。
  • 調用 router.register 方法注冊 ModelViewSet,指定 URL 前綴和視圖集。
  • 示例:
    from rest_framework.routers import DefaultRouter
    from .views import TaskViewSetrouter = DefaultRouter()
    router.register(r'tasks', TaskViewSet)
    urlpatterns = [path('api/', include(router.urls)),
    ]
    
  • 自動生成 /api/tasks/(列表和創建)和 /api/tasks/<id>/(詳情、更新、刪除)等端點。

考察點:掌握 ModelViewSet 與路由器的集成。


中等題目 (5 道)

3. 如何在 ModelViewSet 中限制查詢集只返回當前用戶的數據?

問題描述:假設有一個 Task 模型,包含 owner 字段(關聯到 User 模型)。如何修改 TaskViewSet,使 GET /api/tasks/ 只返回當前登錄用戶的任務?

答案提示

  • 重寫 get_queryset 方法,根據 self.request.user 過濾查詢集。
  • 示例:
    class TaskViewSet(viewsets.ModelViewSet):serializer_class = TaskSerializerpermission_classes = [permissions.IsAuthenticated]def get_queryset(self):return Task.objects.filter(owner=self.request.user)
    
  • 需要確保用戶已登錄(IsAuthenticated 權限)。

考察點:理解 get_queryset 的動態過濾和權限控制。


4. 如何在 ModelViewSet 中為不同操作使用不同的序列化器?

問題描述:在 TaskViewSet 中,list 操作只需要返回 idtitle,而其他操作需要返回所有字段。如何實現?

答案提示

  • 重寫 get_serializer_class 方法,根據 self.action 返回不同的序列化器。
  • 示例:
    class TaskListSerializer(serializers.ModelSerializer):class Meta:model = Taskfields = ['id', 'title']class TaskSerializer(serializers.ModelSerializer):class Meta:model = Taskfields = '__all__'class TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.all()def get_serializer_class(self):if self.action == 'list':return TaskListSerializerreturn TaskSerializer
    

考察點:掌握 get_serializer_class 的動態選擇機制。


5. 如何在 ModelViewSet 中添加自定義動作?

問題描述:為 TaskViewSet 添加一個自定義動作 mark_completed,通過 POST /api/tasks/<id>/mark_completed/ 將任務標記為已完成。提供代碼示例。

答案提示

  • 使用 @action 裝飾器定義自定義動作。
  • 示例:
    from rest_framework.decorators import action
    from rest_framework.response import Responseclass TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.all()serializer_class = TaskSerializer@action(detail=True, methods=['post'])def mark_completed(self, request, pk=None):task = self.get_object()task.completed = Truetask.save()serializer = self.get_serializer(task)return Response(serializer.data)
    
  • detail=True 表示該動作針對單個對象,URL 為 /api/tasks/<id>/mark_completed/

考察點:理解 @action 裝飾器和自定義端點的實現。


6. 如何在 ModelViewSet 中實現分頁?

問題描述:當任務列表很長時,如何為 TaskViewSetlist 操作啟用分頁,每頁顯示 10 條記錄?

答案提示

  • settings.py 中配置全局分頁,或在 ViewSet 中指定分頁類。
  • 示例(全局配置):
    # settings.py
    REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination','PAGE_SIZE': 10
    }
    
  • 或者在 ViewSet 中:
    class TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.all()serializer_class = TaskSerializerpagination_class = PageNumberPaginationpage_size = 10
    
  • 訪問 /api/tasks/?page=2 獲取第二頁數據。

考察點:掌握 DRF 的分頁機制和配置。


7. 如何為 ModelViewSet 添加過濾功能?

問題描述:如何讓 TaskViewSet 支持通過查詢參數過濾任務,例如 GET /api/tasks/?completed=true 只返回已完成的任務?

答案提示

  • 使用 DRF 的 django-filter 擴展或自定義過濾。
  • 安裝 django-filterpip install django-filter
  • 示例:
    # settings.py
    INSTALLED_APPS = [... , 'django_filters']
    REST_FRAMEWORK = {'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
    }# views.py
    class TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.all()serializer_class = TaskSerializerfilterset_fields = ['completed']
    
  • 訪問 /api/tasks/?completed=true 即可過濾。

考察點:理解 DRF 的過濾后端和 django-filter 的使用。


難題 (3 道)

8. 如何在 ModelViewSet 中實現復雜的權限控制?

問題描述:假設 Task 模型有一個 is_private 字段。只有任務的擁有者或超級用戶可以查看/編輯私有任務(is_private=True),其他用戶只能訪問非私有任務。如何實現?

答案提示

  • 創建自定義權限類,繼承 permissions.BasePermission
  • 示例:
    from rest_framework import permissionsclass TaskPermission(permissions.BasePermission):def has_object_permission(self, request, view, obj):if not obj.is_private:return True  # 非私有任務對所有人可訪問return obj.owner == request.user or request.user.is_superuserclass TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.all()serializer_class = TaskSerializerpermission_classes = [permissions.IsAuthenticated, TaskPermission]def get_queryset(self):if self.request.user.is_superuser:return Task.objects.all()return Task.objects.filter(models.Q(is_private=False) | models.Q(owner=self.request.user))
    
  • has_object_permission 控制單個對象的訪問權限,get_queryset 過濾列表。

考察點:高級權限控制、自定義權限類和查詢集過濾的結合。


9. 如何在 ModelViewSet 中處理嵌套序列化器?

問題描述:假設 Task 模型與 Category 模型通過外鍵關聯(task.category)。如何在 TaskViewSet 中返回任務時包含分類的詳細信息,而不是僅返回分類 ID?

答案提示

  • 在序列化器中使用嵌套序列化器。
  • 示例:
    # models.py
    class Category(models.Model):name = models.CharField(max_length=100)class Task(models.Model):title = models.CharField(max_length=200)category = models.ForeignKey(Category, on_delete=models.CASCADE)# serializers.py
    class CategorySerializer(serializers.ModelSerializer):class Meta:model = Categoryfields = ['id', 'name']class TaskSerializer(serializers.ModelSerializer):category = CategorySerializer(read_only=True)class Meta:model = Taskfields = ['id', 'title', 'category']# views.py
    class TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.all()serializer_class = TaskSerializer
    
  • 為支持創建/更新任務時接收分類 ID,需重寫序列化器的 create/update 方法。

考察點:嵌套序列化器、只讀字段和復雜數據結構的處理。


10. 如何優化 ModelViewSet 的性能?

問題描述:假設 TaskViewSetlist 操作需要處理大量數據(例如 10 萬條任務記錄),如何優化性能以減少響應時間?

答案提示

  • 分頁:啟用分頁(參考題目 6),限制每次返回的記錄數。
  • 選擇性字段加載:使用 select_relatedprefetch_related 優化數據庫查詢。
    class TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.select_related('category').all()serializer_class = TaskSerializer
    
  • 緩存:使用 Django 的緩存框架或 DRF 的緩存裝飾器。
    from rest_framework.decorators import cache_pageclass TaskViewSet(viewsets.ModelViewSet):queryset = Task.objects.all()serializer_class = TaskSerializer@cache_page(60 * 15)  # 緩存 15 分鐘def list(self, request, *args, **kwargs):return super().list(request, *args, **kwargs)
    
  • 索引:在數據庫中為常用查詢字段(如 ownercompleted)添加索引。
  • 異步任務:對于耗時操作(如批量更新),使用 Celery 異步處理。

考察點:性能優化技巧,包括數據庫查詢優化、緩存和異步任務。

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

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

相關文章

TRAE IDE** 下載、安裝、開發、測試和部署 2048 小游戲的全流程指南

以下是一份完整的 TRAE IDE 下載、安裝、開發、測試和部署 2048 小游戲的全流程指南。整個過程基于 TRAE 作為 AI 輔助編程工具的特性&#xff08;對標 Cursor/AWS Kiro&#xff09;&#xff0c;假設它支持智能代碼生成和云部署功能。 【插播】騰訊云AI Coding大賽https://mar…

重學前端005 --- 響應式網頁設計 CSS 盒子模型

文章目錄BOX 盒子概念CSSoverflow: hidden;filter: blur(3px);box-shadow: 0 0 3px 3px #efb762;border-radius: 30px 25px 60px 12px;transform: rotate(-0.6deg);每個 HTML 元素都是一個盒子&#xff0c;它擁有著自己的間距和邊框。這叫作“盒子模型”。 BOX 盒子概念 內容…

TC500R立式加工中心主軸箱機械結構設計cad【11張】三維圖+設計說明書

TC500R立式加工中心主軸箱機械結構設計 摘 要 數控機床作為工業制造的基礎&#xff0c;在國家的發展中起著非常重要的作用。隨著我國經濟的快速發展&#xff0c;我國已經成為工業制造大國&#xff0c;制造業的發展離不開數控機床&#xff0c;而TC500R立式加工中心作為數控機床…

CSS Grid布局:構建現代網頁的強大網格系統

目錄 一、Grid布局基礎概念 1.1 網格容器與網格項 1.2 創建基本網格 二、核心屬性詳解 2.1 定義網格軌道 2.2 網格間距控制 2.3 網格項對齊方式 三、實戰布局技巧 3.1 創建經典布局 3.2 網格項定位技巧 3.3 響應式網格設計 四、Grid布局 vs Flexbox布局 五、高級…

Elasticsearch / MongoDB / Redis / MySQL 區別

1、一句話簡介名稱核心用途Elasticsearch強大的全文檢索與日志分析引擎MongoDB靈活的文檔數據庫&#xff0c;適合半結構化/結構化數據Redis高性能的內存鍵值緩存數據庫&#xff0c;用于實時高并發處理MySQL經典關系型數據庫&#xff0c;強事務支持&#xff0c;結構化數據持久存…

網絡通信之基礎知識

一、什么是計算機網絡&#xff1f;計算機網絡是指由若干主機、通信鏈路和網絡設備&#xff08;如路由器、交換機等&#xff09;組成的系統&#xff0c;借助通信協議&#xff0c;實現信息共享和資源互聯。其本質是&#xff1a;多臺設備之間通過協議進行數據交換。二、網絡協議與…

Java 設計模式及應用場景

Java 設計模式是解決軟件開發中常見問題的通用方案&#xff0c;通過合理的設計模式可以提高代碼的可維護性、可擴展性和復用性。下面將介紹 Java 中常見的設計模式及其原理。一、設計模式的分類設計模式主要分為三大類&#xff0c;共 23 種經典模式&#xff1a;創建型模式&…

GitHub Jekyll博客本地Win開發環境搭建

GitHub Jekyll博客本地Win開發環境搭建 標簽 后端 blog jekyll 全文鏈接 GitHub Jekyll博客本地Win開發環境搭建 概述 本文詳細介紹了在Windows系統上搭建Jekyll博客本地開發環境的完整步驟&#xff0c;為GitHub Pages博客開發提供本地預覽和調試能力。 環境依賴 Ruby環…

瀏覽器防錄屏是怎樣提高視頻安全性?

文章目錄前言一、什么是瀏覽器防錄屏二、瀏覽器防錄屏的原理是什么&#xff1f;&#xff08;javascript&#xff09;三、如何實現瀏覽器防錄屏總結前言 在數字內容版權保護面臨嚴峻挑戰的今天&#xff0c;瀏覽器防錄屏技術作為視頻安全體系的關鍵一環&#xff0c;其重要性日益…

uni-app項目配置通用鏈接拉起ios應用android應用

uniapp開發ios&android可拉起app的辛酸歷程IOS配置指南1、登錄[apple Developer](https://developer.apple.com/account/resources/identifiers/list)賬戶找到自己開發的對應的項目2、確保對應項目的Associated Domains是打開狀態3、本地創建一個 apple-app-site-associati…

deep learning(李宏毅)--(六)--loss

一&#xff0c;關于分類問題及其損失函數的一些討論。 在構建分類模型是&#xff0c;我們的最后一層往往是softmax函數&#xff08;起到歸一化的作用&#xff09;&#xff0c;如果是二分類問題也可以用sigmoid函數。 在loss函數的選擇上&#xff0c;一般采用交叉熵損失函數(…

Python綁定及其在Mujoco仿真器中的作用

好的&#xff0c;這是一個非常核心且重要的問題。我來分兩部分為你詳細解釋&#xff1a;首先是“什么是Python綁定”&#xff0c;然后是“它在MuJoCo中具體的作用”。第一部分&#xff1a;什么是Python綁定 (Python Binding)&#xff1f; 簡單來說&#xff0c;Python綁定是一座…

數學建模從入門到國獎——備賽規劃優秀論文學習方法

數學建模從入門到國獎——備賽規劃 數學建模國一&#xff1a;我的逆襲經驗分享在大二&#xff0c;我們團隊初次參加媽媽杯&#xff0c;遺憾未獲獎&#xff0c;后來經過5個月的時間&#xff0c;在大三上學期的9月&#xff0c;我們團隊以C題數據挖掘機器學習創新斬獲國賽一等獎&a…

大型語言模型的白日夢循環

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【Gaussian Haircut論文】在Deepseek和Chatgpt的幫助下慢速了解核心方法

3.Method 一、 1.核心目標 輸入&#xff1a;多張從不同角度拍攝的頭發照片。輸出&#xff1a;3D發型模型&#xff0c;且模型由發絲構成&#xff08;即每根頭發被建模為獨立的曲線/線段&#xff0c;而非體積/網絡&#xff09;。 2.數據預處理 在正式重建前&#xff0c;需要從輸入…

眾趣SDK重磅升級:空間物聯IOT新視界,賦能實景三維場景深度應用

近日&#xff0c;空間數字孿生云服務行業領導者—眾趣科技宣布旗下核心產品云服務平臺Qverse SDK迎來里程碑式升級&#xff01;本次升級聚焦行業前沿需求&#xff0c;重磅推出IoT設備監控系統、iframe跨平臺頁面無縫集成、BI數據智能三大解決方案&#xff0c;旨在將三維空間計算…

021_自然語言處理應用

自然語言處理應用 目錄 NLP應用概述文本理解技術文本生成應用語言分析工具多語言處理專業領域應用實踐案例 NLP應用概述 核心能力范圍 文本理解 語義理解&#xff1a;深度理解文本含義和上下文實體識別&#xff1a;識別人名、地名、機構名等命名實體關系提取&#xff1a;…

小程序中狀態管理Redux

Redux 是一個 集中式 狀態管理框架&#xff0c;所有狀態存儲在一個 全局 Store 中&#xff0c;并通過 Action 觸發 Reducer 進行數據更新。。1.安裝npm install redux miniprogram-computed2.創建// store.js import { createStore } from "redux";// 定義初始狀態 c…

c++:類型轉換函數

簡介 在C++中,類型轉換運算符(也稱為類型轉換函數或轉換函數)是一種特殊的成員函數,它允許將一個類類型的對象轉換為其他類型。轉換運算符的聲明形式如下: operator type() const; 關鍵點 ??聲明??:在類內部聲明,沒有返回類型(因為type已經表示了返回類型),沒…