欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

介紹

drf框架是基于Django框架,用于快速構(gòu)建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
  • 注意外鍵對應關(guān)系

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. 效果顯示

序列化關(guān)聯(lián)返回serializers

1. 返回關(guān)聯(lián)外鍵的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. 返回關(guān)聯(lián)字段模型的__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框架序列化視圖的詳細內(nèi)容,更多關(guān)于Django drf框架序列化 視圖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 繪制?;鶊D全面解析

    Python 繪制?;鶊D全面解析

    ?;鶊D,即?;芰糠至鲌D,也叫?;芰科胶鈭D。它是一種特定類型的流程圖,圖中延伸的分支的寬度對應數(shù)據(jù)流量的大小,通常應用于能源、材料成分、金融等數(shù)據(jù)的可視化分析。試了一下用python畫?;鶊D,在這里整理了一下分享給大家
    2021-09-09
  • Python實戰(zhàn)之使用PyQt5構(gòu)建HTTP接口測試工具

    Python實戰(zhàn)之使用PyQt5構(gòu)建HTTP接口測試工具

    在現(xiàn)代軟件開發(fā)中,測試接口的有效性與響應情況變得尤為重要,本文將指導構(gòu)建一個簡單的HTTP接口測試工具,使用Python的PyQt5庫創(chuàng)建用戶界面,并通過requests庫發(fā)送 HTTP 請求,需要的可以參考下
    2024-11-11
  • 簡單學習Python多進程Multiprocessing

    簡單學習Python多進程Multiprocessing

    這篇文章主要和大家一起簡單的學習Python多進程Multiprocessing ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • python內(nèi)存泄漏排查技巧總結(jié)

    python內(nèi)存泄漏排查技巧總結(jié)

    這篇文章主要給大家分享了python內(nèi)存泄漏排查技巧總結(jié),工作過程中服務難免遇到內(nèi)存泄漏問題,下面文章就給大家總結(jié)一些排查下技巧,具有一定的參考價值,需要的朋友可以參考一下
    2021-12-12
  • python進程類subprocess的一些操作方法例子

    python進程類subprocess的一些操作方法例子

    這篇文章主要介紹了python進程類subprocess的一些操作方法例子,本文講解了Popen、wait、poll、kill、communicate等方法的實際操作例子,需要的朋友可以參考下
    2014-11-11
  • Python使用Selenium自動進行百度搜索的實現(xiàn)

    Python使用Selenium自動進行百度搜索的實現(xiàn)

    我們今天介紹一個非常適合新手的python自動化小項目,這個例子非常適合新手學習Python網(wǎng)絡自動化,不僅能夠了解如何使用Selenium,而且還能知道一些超級好用的小工具。感興趣的可以了解一下
    2021-07-07
  • 15個Python運行速度優(yōu)化技巧分享

    15個Python運行速度優(yōu)化技巧分享

    這篇文章主要為大家詳細介紹了15個Python運行速度優(yōu)化技巧,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2025-02-02
  • Python排序算法之插入排序及其優(yōu)化方案詳解

    Python排序算法之插入排序及其優(yōu)化方案詳解

    今天給大家?guī)淼奈恼率顷P(guān)于Python的相關(guān)知識,文章圍繞著Python插入排序及其優(yōu)化方案展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Matplotlib快速入門指南(適合小白)

    Matplotlib快速入門指南(適合小白)

    這篇文章主要給大家介紹了關(guān)于Matplotlib快速入門指南的相關(guān)資料,Matplotlib是一個非常強大的Python畫圖工具,支持跨平臺運行,它不僅是Python常用的2D繪圖庫,同時它也提供了一部分3D繪圖接口,需要的朋友可以參考下
    2023-09-09
  • 20行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn)

    20行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn)

    這篇文章主要介紹了20行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論