基于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實戰(zhàn)之使用PyQt5構(gòu)建HTTP接口測試工具
在現(xiàn)代軟件開發(fā)中,測試接口的有效性與響應情況變得尤為重要,本文將指導構(gòu)建一個簡單的HTTP接口測試工具,使用Python的PyQt5庫創(chuàng)建用戶界面,并通過requests庫發(fā)送 HTTP 請求,需要的可以參考下2024-11-11Python使用Selenium自動進行百度搜索的實現(xiàn)
我們今天介紹一個非常適合新手的python自動化小項目,這個例子非常適合新手學習Python網(wǎng)絡自動化,不僅能夠了解如何使用Selenium,而且還能知道一些超級好用的小工具。感興趣的可以了解一下2021-07-0720行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn)
這篇文章主要介紹了20行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08