国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Django】Task4 序列化及其高級(jí)使用、ModelViewSet

這篇具有很好參考價(jià)值的文章主要介紹了【Django】Task4 序列化及其高級(jí)使用、ModelViewSet。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【Django】Task4 序列化及其高級(jí)使用、ModelViewSet

Task4主要了解序列化及掌握其高級(jí)使用,了解ModelViewSet的作用,ModelViewSet 是 Django REST framework(DRF)中的一個(gè)視圖集類,用于快速創(chuàng)建處理模型數(shù)據(jù)的 API 視圖。
【Django】Task4 序列化及其高級(jí)使用、ModelViewSet,django,數(shù)據(jù)庫(kù),sqlite

1.Django的序列化

Django 的序列化是指將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(通常是數(shù)據(jù)庫(kù)中的模型對(duì)象)轉(zhuǎn)換為可以在不同應(yīng)用程序間傳輸和存儲(chǔ)的格式,如 JSON、XML 或類似的格式。這使得數(shù)據(jù)可以在不同系統(tǒng)、平臺(tái)或前后端之間進(jìn)行交換和共享。

在 Django 中,序列化主要用于處理以下兩個(gè)場(chǎng)景:

數(shù)據(jù)交換和傳輸: 當(dāng)您需要在應(yīng)用程序的不同部分之間傳遞數(shù)據(jù)時(shí),例如在后端和前端之間,或在不同的服務(wù)之間,您可以將數(shù)據(jù)序列化為一種通用格式,如 JSON。這樣,數(shù)據(jù)可以在不同系統(tǒng)之間傳輸和解析。

API 響應(yīng): 在開(kāi)發(fā) Web API 時(shí),您通常會(huì)需要將數(shù)據(jù)庫(kù)中的數(shù)據(jù)轉(zhuǎn)換為特定的數(shù)據(jù)格式(如 JSON),以便客戶端可以輕松地消費(fèi)數(shù)據(jù)。這就涉及到將 Django 模型對(duì)象序列化為 JSON 或其他格式,然后將其返回給客戶端。

Django 提供了一個(gè)內(nèi)置的序列化框架,稱為 Django REST framework(DRF),它是一個(gè)功能強(qiáng)大的工具,用于處理序列化和反序列化。使用 DRF,您可以輕松地將 Django 模型轉(zhuǎn)換為 JSON 格式,或者從 JSON 格式反序列化回模型對(duì)象。

1.1序列化常用到的參數(shù)

在 Django REST framework 中,進(jìn)行序列化時(shí),常用的一些參數(shù)可以用來(lái)控制序列化的行為和輸出。以下是一些常用的序列化參數(shù):

fields: 用于指定要序列化的字段列表。您可以選擇性地列出要包含在序列化輸出中的字段。

exclude: 與 fields 相反,用于指定不包含在序列化輸出中的字段列表。

read_only_fields: 用于指定在反序列化(從 JSON 到模型對(duì)象)時(shí)不允許更新的字段列表。這些字段只能在創(chuàng)建時(shí)指定,之后不能更改。

write_only_fields: 與 read_only_fields 相反,用于指定在序列化(從模型對(duì)象到 JSON)時(shí)不包含在輸出中的字段列表。這些字段只用于接收輸入。

validators: 用于指定字段級(jí)別的驗(yàn)證器列表,這些驗(yàn)證器會(huì)在序列化和反序列化過(guò)程中執(zhí)行。

extra_kwargs: 允許您為特定字段提供附加參數(shù),例如指定自定義驗(yàn)證器或者控制序列化行為。

many: 用于指示是否進(jìn)行批量序列化。如果為 True,則序列化器將在序列化多個(gè)對(duì)象時(shí)執(zhí)行批量操作。

allow_null: 用于指示是否允許序列化字段的值為 None,默認(rèn)為 False。

required: 用于指示字段是否為必填字段,如果為 True,則在反序列化時(shí)必須提供該字段的值。

default: 用于指定字段的默認(rèn)值,在反序列化時(shí),如果未提供該字段的值,將使用默認(rèn)值。

source: 用于指定要從模型中獲取數(shù)據(jù)的字段名稱。如果序列化器的字段名稱與模型字段名稱不同,可以使用該參數(shù)來(lái)指定模型字段的名稱。

label: 用于指定字段在序列化輸出中的標(biāo)簽,用于更友好的展示字段名稱。

這只是一些常見(jiàn)的序列化參數(shù),Django REST framework 提供了豐富的選項(xiàng)和配置,以滿足不同的序列化需求。您可以根據(jù)具體的情況選擇適當(dāng)?shù)膮?shù)來(lái)定制您的序列化器。

1.2序列化示例

以下是一個(gè)簡(jiǎn)單的示例,說(shuō)明如何使用 DRF 進(jìn)行序列化:

  • serializer.py
# 定義產(chǎn)品序列化器
from rest_framework.serializers import *
from .models import *

# 產(chǎn)品分類序列化器
class GoodsCategorySerializer(ModelSerializer):
    class Meta:
        model = GoodsCategory
        fields = ('name', 'remark')

# 產(chǎn)品序列化器
class GoodsSerializer(ModelSerializer):
    # 外鍵字段相關(guān)的數(shù)據(jù) 需要單獨(dú)序列化
    category = GoodsCategorySerializer()

    class Meta:
        model = Goods

        # 序列化單個(gè)字段
        fields = ('name',)

        # 序列化多個(gè)字段
        fields = ('name','number',)



        # 序列化所有字段
        fields = '__all__'

在這個(gè)示例中,我們定義了名為 GoodsCategorySerializer、GoodsSerializer 的序列化器,用于將 GoodsCategory、Goods 模型轉(zhuǎn)換為 JSON 格式。通過(guò) serializers.ModelSerializer 類,我們可以很方便地將模型字段映射到序列化器的字段,并使用 Meta 類來(lái)指定要序列化的模型和字段。

總之,Django 的序列化是將復(fù)雜的數(shù)據(jù)轉(zhuǎn)換為通用數(shù)據(jù)格式的過(guò)程,用于數(shù)據(jù)交換、API 響應(yīng)等場(chǎng)景。Django REST framework 提供了強(qiáng)大的序列化框架,使數(shù)據(jù)的轉(zhuǎn)換和傳輸變得更加簡(jiǎn)便。

  • views.py
from django.shortcuts import render
from rest_framework.response import Response
from .models import *
from rest_framework.decorators import api_view
from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from .serializer import *

class GetGoods(APIView):
    def get(self, request):
        data = Goods.objects.all()
        serializer = GoodsSerializer(instance=data, many=True)
        print(serializer.data)
        return Response(serializer.data)

    def post(self, request):
        # 從請(qǐng)求數(shù)據(jù)中提取字段
        request_data = {
            "category": request.data.get("Goodscategory"),
            "number": request.data.get("number"),
            "name": request.data.get("name"),
            "barcode": request.data.get("barcode"),
            "spec": request.data.get("spec"),
            "shelf_life_days": request.data.get("shelf_life_days"),
            "purchase_price": request.data.get("purchase_price"),
            "retail_price": request.data.get("retail_price"),
            "remark": request.data.get("remark"),
        }

        # 使用 create() 方法創(chuàng)建新的商品對(duì)象
        new_goods = Goods.objects.create(**request_data)

        # 對(duì)創(chuàng)建的對(duì)象進(jìn)行序列化,并作為響應(yīng)返回
        serializer = GoodsSerializer(instance=new_goods)
        return Response(serializer.data)
  • urls.py
from django.contrib import admin
from django.urls import path
from apps.erp_test.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('getgoods/', GetGoods.as_view()),
]

1.3序列化單個(gè)對(duì)象

#獲取對(duì)象 
data = Goods.objects.get(id=1)?

#創(chuàng)建序列化器 
sberializer = GoodsSerializer(instance=data)?

#轉(zhuǎn)換數(shù)據(jù) 
print(serializer.data)?

注意點(diǎn):

?instance?是一個(gè)參數(shù),用于指定要序列化或反序列化的 Python 對(duì)象。具體來(lái)說(shuō),它是一個(gè)類實(shí)例(Class Instance),通常是指一個(gè)從數(shù)據(jù)庫(kù)或其他數(shù)據(jù)源中檢索出來(lái)的模型實(shí)例(Model Instance)。

當(dāng)我們需要將一個(gè)模型實(shí)例轉(zhuǎn)換為 JSON 或其他格式時(shí),可以使用 Django 的序列化器(Serializer)來(lái)實(shí)現(xiàn)。

1.4序列化多個(gè)對(duì)象

data = Goods.objects.all() # 獲取對(duì)象

# 創(chuàng)建序列化器,many表示序列化多個(gè)對(duì)象,默認(rèn)為單個(gè)
serializer = GoodsSerializer(instance=data,many=True)

print(serializer.data) # 轉(zhuǎn)換數(shù)據(jù)

# 輸出:
[OrderedDict([('id', 1), ('number', '1'), ('name', '第一個(gè)產(chǎn)品'), ('purchase_price', 100.0), ('retail_price', 150.0), ('remark', '測(cè)試產(chǎn)品')]), OrderedDict([('id', 2), ('number', '123'), ('name', '產(chǎn)品2'), ('purchase_price', 123.0), ('retail_price', 4123.0), ('remark', '測(cè)試產(chǎn)品2')])]  

2.Django的ModelViewSet

ModelViewSet 是 Django REST framework(DRF)中的一個(gè)視圖集類,用于快速創(chuàng)建處理模型數(shù)據(jù)的 API 視圖。它提供了一組默認(rèn)的 CRUD(創(chuàng)建、讀取、更新、刪除)操作,可以用于操作 Django 模型中的數(shù)據(jù)。

ModelViewSet 通過(guò)將常見(jiàn)的 API 操作封裝到一個(gè)類中,使得編寫(xiě) API 視圖變得更加簡(jiǎn)潔和方便。它繼承自 DRF 中的 GenericAPIView,并結(jié)合了 ListModelMixin、CreateModelMixin、RetrieveModelMixin、UpdateModelMixin 和 DestroyModelMixin,從而提供了一系列用于處理模型數(shù)據(jù)的默認(rèn)操作。

2.1ModelViewSet示例

以下是一個(gè)使用 ModelViewSet 的簡(jiǎn)單示例:

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

在這個(gè)示例中,假設(shè)有一個(gè)名為 Book 的模型和相應(yīng)的序列化器 BookSerializer。通過(guò)創(chuàng)建一個(gè)繼承自 ModelViewSet 的 BookViewSet 類,您可以自動(dòng)獲得以下操作:

知識(shí)點(diǎn) 請(qǐng)求 url 特點(diǎn)
GenericViewSet 提供一組通用的視圖方法,方便實(shí)現(xiàn)特定功能
ListModelMixin get 127.0.0.1:8000/book/ 提供 list? 方法,用于獲取資源列表
RetrieveModelMixin get 127.0.0.1:8000/book/{1}/ 提供 retrieve? 方法,用于獲取單個(gè)資源的詳細(xì)信息
CreateModelMixin post 127.0.0.1:8000/book/ 提供 create? 方法,用于創(chuàng)建資源
UpdateModelMixin put 127.0.0.1:8000/book/{1}/ 提供 update? 方法,用于更新資源
DestroyModelMixin detete 127.0.0.1:8000/book/{1}/ 提供 destroy? 方法,用于刪除資源
自定義 get/post 127.0.0.1:8000/book/自定義 用戶自定義方法/函數(shù)

這些技術(shù)知識(shí)點(diǎn)可以配合使用,幫助我們快速構(gòu)建出具有 CRUD 功能的 Web 應(yīng)用,并且遵循了 Django 框架的慣例和最佳實(shí)踐。它們的應(yīng)用場(chǎng)景包括博客系統(tǒng)、電商平臺(tái)、社交網(wǎng)絡(luò)等各種類型的 Web 應(yīng)用。通過(guò)使用這些技術(shù)知識(shí)點(diǎn),我們能夠提高開(kāi)發(fā)效率,減少重復(fù)的代碼編寫(xiě)工作,并且保證代碼的一致性和可維護(hù)性。

列出所有圖書(shū):GET 請(qǐng)求將返回所有圖書(shū)的列表。
創(chuàng)建新圖書(shū):POST 請(qǐng)求將創(chuàng)建一個(gè)新的圖書(shū)。
獲取單個(gè)圖書(shū):GET 請(qǐng)求將返回指定圖書(shū)的詳細(xì)信息。
更新圖書(shū):PUT 或 PATCH 請(qǐng)求將更新指定圖書(shū)的信息。
刪除圖書(shū):DELETE 請(qǐng)求將刪除指定圖書(shū)。
ModelViewSet 還允許您通過(guò)覆蓋一些方法來(lái)自定義行為,例如覆蓋 get_queryset() 來(lái)定義自己的查詢集,或者覆蓋 perform_create() 來(lái)在創(chuàng)建對(duì)象時(shí)執(zhí)行自定義操作。

總之,ModelViewSet 是 Django REST framework 中的一個(gè)有用的工具,用于快速創(chuàng)建處理模型數(shù)據(jù)的 API 視圖,并且提供了一系列默認(rèn)操作,減少了繁瑣的代碼編寫(xiě)。

補(bǔ)充上述圖書(shū)curd中的Book模型和序列化器
定義 Book 模型:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()
    isbn = models.CharField(max_length=13)

    def __str__(self):
        return self.title

與 Book 模型對(duì)應(yīng)的序列化器 BookSerializer:

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

在這個(gè)示例中,我們創(chuàng)建了一個(gè)名為 Book 的模型,其中包含了一些基本的字段,如標(biāo)題、作者、出版日期和 ISBN 號(hào)。然后,我們創(chuàng)建了一個(gè) BookSerializer,使用 serializers.ModelSerializer 類來(lái)定義序列化器。在 Meta 類中,我們將模型設(shè)置為 Book,并使用 fields = ‘all’ 來(lái)指定所有模型字段都會(huì)被包含在序列化輸出中。

通過(guò)這樣的設(shè)置,可以使用 BookSerializer 來(lái)序列化和反序列化 Book 模型的數(shù)據(jù),從而在 API 視圖中進(jìn)行數(shù)據(jù)的展示和操作。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-665952.html

到了這里,關(guān)于【Django】Task4 序列化及其高級(jí)使用、ModelViewSet的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Django REST Framework入門(mén)之序列化器

    Django REST Framework入門(mén)之序列化器

    Django REST framework (簡(jiǎn)稱:DRF)是一個(gè)強(qiáng)大而靈活的 Web API 工具。遵循RESTFullAPI風(fēng)格,功能完善。 能簡(jiǎn)化序列化及開(kāi)發(fā)REST API視圖的代碼,大大提高REST API的開(kāi)發(fā)速度;提供靈活的路由API,內(nèi)置了強(qiáng)大的認(rèn)證和授權(quán)機(jī)制 Django REST framework 最新版使用要求 在settings.py文件的INSTALLED_

    2024年01月21日
    瀏覽(26)
  • Django REST framework中的序列化Serializers

    序列化器允許將諸如查詢集和模型實(shí)例之類的復(fù)雜數(shù)據(jù)轉(zhuǎn)換為原生 Python 數(shù)據(jù)類型,然后可以將它們輕松地呈現(xiàn)為 JSON,XML 或其他內(nèi)容類型。序列化器還提供反序列化,在首次驗(yàn)證傳入數(shù)據(jù)之后,可以將解析的數(shù)據(jù)轉(zhuǎn)換回復(fù)雜類型。 簡(jiǎn)單來(lái)說(shuō),服務(wù)器通過(guò)api 返回?cái)?shù)據(jù)(json格

    2024年02月09日
    瀏覽(24)
  • django rest_framework 框架動(dòng)態(tài)設(shè)置序列化返回的字段

    django rest_framework 框架動(dòng)態(tài)設(shè)置序列化返回的字段

    動(dòng)態(tài)修改字段可以使Django rest框架API像graphQL端點(diǎn)一樣,只從模型中檢索所需的字段。 一旦序列化器被初始化,就可以使用.fields屬性訪問(wèn)序列化器上設(shè)置的字段字典。訪問(wèn)和修改此屬性允許您動(dòng)態(tài)修改序列化器。 顯式地修改fields參數(shù)可以幫助您做一些奇怪的事情,例如在運(yùn)行

    2024年02月16日
    瀏覽(25)
  • 由Django-Session配置引發(fā)的反序列化安全問(wèn)題

    漏洞成因位于目標(biāo)配置文件settings.py下 關(guān)于這兩個(gè)配置項(xiàng) SESSION_ENGINE: 在Django中, SESSION_ENGINE ?是一個(gè)設(shè)置項(xiàng),用于指定用于存儲(chǔ)和處理會(huì)話(session)數(shù)據(jù)的引擎。 SESSION_ENGINE ?設(shè)置項(xiàng)允許您選擇不同的后端引擎來(lái)存儲(chǔ)會(huì)話數(shù)據(jù),例如: 數(shù)據(jù)庫(kù)后端 ?( django.contrib.sessions.b

    2024年02月08日
    瀏覽(21)
  • Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(九)環(huán)境envs序列化器及視圖【持續(xù)更新中】

    Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(九)環(huán)境envs序列化器及視圖【持續(xù)更新中】

    相關(guān)文章: Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(八)測(cè)試報(bào)告reports序列化器及視圖【持續(xù)更新中】_做測(cè)試的喵醬的博客-CSDN博客 本章是項(xiàng)目的一個(gè)分解,查看本章內(nèi)容時(shí),要結(jié)合整體項(xiàng)目代碼來(lái)看: python django vue httprunner 實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(最終版)_python+vue自動(dòng)化測(cè)試平臺(tái)_做測(cè)

    2024年02月16日
    瀏覽(21)
  • Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(十一)項(xiàng)目模塊Projects序列化器及視圖【持續(xù)更新中】

    Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(十一)項(xiàng)目模塊Projects序列化器及視圖【持續(xù)更新中】

    相關(guān)文章: Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(十)自定義action names【持續(xù)更新中】_做測(cè)試的喵醬的博客-CSDN博客 本章是項(xiàng)目的一個(gè)分解,查看本章內(nèi)容時(shí),要結(jié)合整體項(xiàng)目代碼來(lái)看: python django vue httprunner 實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(最終版)_python+vue自動(dòng)化測(cè)試平臺(tái)_做測(cè)試的喵醬的博

    2024年02月16日
    瀏覽(45)
  • Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(八)測(cè)試報(bào)告reports序列化器及視圖【持續(xù)更新中】

    上一章: Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(七)數(shù)據(jù)庫(kù)設(shè)計(jì)_做測(cè)試的喵醬的博客-CSDN博客 下一章: 官方文檔: Serializers - Django REST framework apps/reports/serializers.py 1.1.1 代碼解釋: 1、? exclude: You can set the? exclude ?attribute to a list of fields to be excluded from the serializer. For example: 2、read_o

    2024年02月09日
    瀏覽(19)
  • Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(十三)接口模塊Interfaces序列化器及視圖【持續(xù)更新中】

    Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(十三)接口模塊Interfaces序列化器及視圖【持續(xù)更新中】

    相關(guān)文章: Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(十二)自定義函數(shù)模塊DebugTalks 序列化器及視圖【持續(xù)更新中】_做測(cè)試的喵醬的博客-CSDN博客 本章是項(xiàng)目的一個(gè)分解,查看本章內(nèi)容時(shí),要結(jié)合整體項(xiàng)目代碼來(lái)看: python django vue httprunner 實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(最終版)_python+vue自動(dòng)化測(cè)

    2024年02月17日
    瀏覽(15)
  • JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流)

    JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流)

    ??博客主頁(yè):?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評(píng)論? 文章目錄 ? ? ? ? 1.0 緩沖流概述 ? ? ? ? 1.1 緩沖流的工作原理 ? ? ? ? 1.2 使用緩沖流的步驟 ? ? ? ? 1.3?字節(jié)緩沖流于字符緩沖流的區(qū)別 ? ? ? ? 1.4?字節(jié)緩沖流的實(shí)例 ? ? ? ? 1.5?字符緩沖流的實(shí)例

    2024年04月29日
    瀏覽(22)
  • Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(十二)自定義函數(shù)模塊DebugTalks 序列化器及視圖【持續(xù)更新中】

    Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(十二)自定義函數(shù)模塊DebugTalks 序列化器及視圖【持續(xù)更新中】

    上一章: Django實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(十一)項(xiàng)目模塊Projects序列化器及視圖【持續(xù)更新中】_做測(cè)試的喵醬的博客-CSDN博客 本章是項(xiàng)目的一個(gè)分解,查看本章內(nèi)容時(shí),要結(jié)合整體項(xiàng)目代碼來(lái)看: python django vue httprunner 實(shí)現(xiàn)接口自動(dòng)化平臺(tái)(最終版)_python+vue自動(dòng)化測(cè)試平臺(tái)_做測(cè)

    2024年02月16日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包