最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Django?drf框架序列化視圖

 更新時間:2023年06月22日 10:22:41   作者:子午  
這篇文章主要為大家介紹了基于Django?drf框架序列化視圖,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

介紹

drf框架是基于Django框架,用于快速構建Web RESTful API的工具

官方文檔:https://www.django-rest-framework.org/

安裝:pip install djangorestframework

快速使用

1. 搭建模型

from django.db import models
class BookModel(models.Model):
    """
    書籍模型
    """
    name = models.CharField(max_length=200, verbose_name='書籍名稱')
    book_info = models.TextField(max_length=1024, default=None, blank=True, verbose_name='書籍介紹')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='創(chuàng)建時間')
    class Meta:
        db_table = 'tb_book'
        verbose_name = '書籍信息'
        verbose_name_plural = verbose_name
class HeroModel(models.Model):
    """
    書籍人物模型
    """
    name = models.CharField(max_length=200, verbose_name='英雄姓名')
    hero_info = models.TextField(max_length=1024, default=None, blank=True, verbose_name='英雄介紹')
    join_time = models.DateTimeField(auto_now_add=True, verbose_name='加入時間')
    book_name = models.ForeignKey('BookModel', on_delete=models.CASCADE, related_name='book_hero', verbose_name='所屬書籍')
    class Meta:
        db_table = 'tb_hero'
        verbose_name = '書籍人物信息'
        verbose_name_plural = verbose_name
  • 注意外鍵對應關系

2. setting配置

INSTALLED_APPS = [
    ......
    'rest_framework',
]

3. 序列化器serializer

# serializers.py
from rest_framework import serializers
from .models import BookModel, HeroModel
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = BookModel
        fields = '__all__'

4. 視圖views

# views.py
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin, CreateModelMixin
from .serializers import BookSerializer
from .models import BookModel
class Books(GenericViewSet, ListModelMixin, CreateModelMixin):
    queryset = BookModel.objects.all()
    serializer_class = BookSerializer

5. 路由自動注冊DefaultRouter

from rest_framework.routers import DefaultRouter
from . import views
app_name = 'book'
urlpatterns = [
]
router = DefaultRouter()
router.register('book', views.Books, basename='book')
urlpatterns += router.urls

6. 效果顯示

序列化關聯返回serializers

1. 返回關聯外鍵的ID:PrimaryKeyRelatedField

class BookSerializer(serializers.ModelSerializer):
    book_hero = serializers.PrimaryKeyRelatedField(read_only=True, many=True)
    class Meta:
        model = BookModel
        fields = ['name', 'book_info', 'book_hero', 'create_time']

2. 返回關聯字段模型的__str__方法的值

StringRelatedField

class BookSerializer(serializers.ModelSerializer):
    book_hero = serializers.StringRelatedField(read_only=True, many=True)
    class Meta:
        model = BookModel
        fields = ['name', 'book_info', 'book_hero', 'create_time']

3. 嵌套序列化器的使用

class BookSerializer(serializers.ModelSerializer):
    # Heroserializer應先于本序列化器前定義
    book_hero = HeroSerializer(many=True)
    class Meta:
        model = BookModel
        fields = ['name', 'book_info', 'book_hero', 'create_time']

4. read_only和write_only

  • read_only=True不參與反序列化驗證過程,只參與序列化返回過程
  • write_only: 不參與序列化返回過程,只參與驗證過程

5. 自定義驗證方法(單/多字段驗證)

單一字段驗證

class BookSerializer(serializers.ModelSerializer):
    book_hero = serializers.StringRelatedField(many=True, read_only=True)
    class Meta:
        model = BookModel
        fields = ['name', 'book_info', 'book_hero', 'create_time']
    def validate_name(self, value):
        """
        驗證書名不能是python
        """
        if value == 'python':
            raise serializers.ValidationError('書名不能是python')
        return value

多字段驗證

def validate(self, attrs):
        if attrs['name'] == 'python' or attrs['book_info'] == 'python':
            raise serializers.ValidationError('書名或info不能是python')
        return attrs

6. self.action自定義裝飾器使用

from rest_framework.decorators import action
class Books(GenericViewSet, ListModelMixin, CreateModelMixin):
    queryset = BookModel.objects.all()
    serializer_class = BookSerializer
    @action(methods=['get'], detail=True)
    def hello(self, request, pk):
        res = 'hello' + str(pk)
        return Response(res)

http://127.0.0.1:8000/book/1/hello/

以上就是基于Django drf框架序列化視圖的詳細內容,更多關于Django drf框架序列化 視圖的資料請關注腳本之家其它相關文章!

相關文章

  • python3基于TCP實現CS架構文件傳輸

    python3基于TCP實現CS架構文件傳輸

    這篇文章主要為大家詳細介紹了python3基于TCP實現CS架構文件傳輸,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 使用Python插入SVG到PDF文檔中的方法示例

    使用Python插入SVG到PDF文檔中的方法示例

    將SVG(可縮放矢量圖形)文件插入到PDF(便攜式文檔格式)文件中不僅能夠保留SVG圖像的矢量特性,確保圖像在任何分辨率下都保持清晰,使得技術文檔、手冊、報告等內容更加豐富多樣且易于傳播,本文將介紹如何使用Python插入SVG文件到PDF文檔中,需要的朋友可以參考下
    2024-08-08
  • Python實現將Excel轉換成xml的方法示例

    Python實現將Excel轉換成xml的方法示例

    這篇文章主要介紹了Python實現將Excel轉換成xml的方法,涉及Python針對Excel文件的讀取、遍歷、節(jié)點設置與xml生成等相關操作技巧,需要的朋友可以參考下
    2018-08-08
  • 通過PYTHON來實現圖像分割詳解

    通過PYTHON來實現圖像分割詳解

    這篇文章主要介紹了通過PYTHON來實現圖像分割詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下
    2019-06-06
  • 基于Python開發(fā)PDF轉Doc格式小程序

    基于Python開發(fā)PDF轉Doc格式小程序

    這篇文章主要為大家詳細介紹了如何基于Python開發(fā)PDF轉Doc格式小程序,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-03-03
  • Django使用django-simple-captcha做驗證碼的實現示例

    Django使用django-simple-captcha做驗證碼的實現示例

    這篇文章主要介紹了Django使用django-simple-captcha做驗證碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Python使用Selenium與pytest進行高效測試的示例詳解

    Python使用Selenium與pytest進行高效測試的示例詳解

    隨著軟件開發(fā)的快速發(fā)展,自動化測試成為了提高開發(fā)效率、降低錯誤率的重要工具,Python作為一種高效且易于使用的編程語言,已經成為自動化測試領域的重要工具之一,本文將介紹如何使用Python、Selenium和pytest進行自動化測試,并展示一個簡單的自動化測試示例
    2025-01-01
  • python 解壓、復制、刪除 文件的實例代碼

    python 解壓、復制、刪除 文件的實例代碼

    這篇文章主要介紹了python 解壓、復制、刪除 文件的實例代碼,代碼簡單易懂非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • python基礎知識(一)變量與簡單數據類型詳解

    python基礎知識(一)變量與簡單數據類型詳解

    這篇文章主要介紹了python變量與簡單數據類型詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • postman傳遞當前時間戳實例詳解

    postman傳遞當前時間戳實例詳解

    在本篇文章里小編給大家整理的是一篇關于postman傳遞當前時間戳知識點相關內容,有需要的朋友們可以學習下。
    2019-09-09

最新評論

崇礼县| 花垣县| 临漳县| 中方县| 金平| 滦南县| 南充市| 疏附县| 喀什市| 凤凰县| 息烽县| 福安市| 望城县| 社旗县| 中牟县| 平阳县| 霍山县| 九寨沟县| 大城县| 孝义市| 新余市| 灵石县| 米泉市| 治县。| 巴楚县| 廊坊市| 山丹县| 克什克腾旗| 晋州市| 咸丰县| 宁国市| 营山县| 旺苍县| 扶风县| 甘德县| 庆元县| 都昌县| 禹州市| 平武县| 枣庄市| 胶南市|