亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

介紹

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)建時(shí)間')
    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='加入時(shí)間')
    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
  • 注意外鍵對(duì)應(yīng)關(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. 路由自動(dòng)注冊(cè)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應(yīng)先于本序列化器前定義
    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不參與反序列化驗(yàn)證過(guò)程,只參與序列化返回過(guò)程
  • write_only: 不參與序列化返回過(guò)程,只參與驗(yàn)證過(guò)程

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

單一字段驗(yàn)證

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):
        """
        驗(yàn)證書名不能是python
        """
        if value == 'python':
            raise serializers.ValidationError('書名不能是python')
        return value

多字段驗(yàn)證

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框架序列化視圖的詳細(xì)內(nèi)容,更多關(guān)于Django drf框架序列化 視圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

    Python 繪制?;鶊D全面解析

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

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

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

    簡(jiǎn)單學(xué)習(xí)Python多進(jìn)程Multiprocessing

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

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

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

    python進(jìn)程類subprocess的一些操作方法例子

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

    Python使用Selenium自動(dòng)進(jìn)行百度搜索的實(shí)現(xiàn)

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

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

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

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

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

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

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

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

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

最新評(píng)論