返回顶部
首页 > 资讯 > 后端开发 > Python >怎么在Python Web框架Django中使用序列化器
  • 448
分享到

怎么在Python Web框架Django中使用序列化器

2023-06-15 21:06:18 448人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“怎么在python WEB框架Django中使用序列化器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python Web框架DjanGo中使用序列化器”吧!序列化

这篇文章主要讲解了“怎么在python WEB框架Django中使用序列化器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python Web框架DjanGo中使用序列化器”吧!

序列化用于将数据转换为方便存储或传输的格式,然后将其重新构建以供使用。DRF 是最具有知名的序列化器。

序列化是将数据转换为可以存储或传输的格式,然后对其进行重新构建的过程。在开发应用程序或将数据存储在数据库、内存或将其转换为文件时,一直会用到它。

我最近帮助 Labcodes 的两名初级开发人员理解序列化器,我想也可以与诸位读者分享一下我的方法。

假设你正在编写一个电子商务网站,你有一个订单,该订单记录了某人在某个日期以某种价格购买了一个产品:

class Order:    def __init__(self, product, customer, price, date):        self.product = product        self.customer = customer        self.price = price        self.date = date

现在,假设你想从一个键值数据库中存储和检索订单数据。幸运的是,它的接口可以接受和返回字典,因此你需要将对象转换成字典:

def serialize_order(order):    return {        'product': order.product,        'customer': order.customer,        'price': order.price,        'date': order.date    }

如果你想从数据库中获取一些数据,你可以获取字典数据并将其转换为订单对象(Order):

def deserialize_order(order_data):    return Order(        product=order_data['product'],        customer=order_data['customer'],        price=order_data['price'],        date=order_data['date'],    )

这对于简单的数据非常直接了当,但是当你需要处理一些由复杂属性构成的复杂对象时,这种方法就无法很好地扩展。你还需要处理不同类型字段的验证,这需要手工完成大量工作。

此时框架的序列化可以很方便的派上用场。它们使你可以创建带有少量模板的序列化器,这将适用于复杂的情况。

Django 提供了一个序列化模块,允许你将模型“转换”为其它格式:

from django.core import serializers serializers.serialize('JSON', Order.objects.all())

它涵盖了 Web 应用程序最常用的种类,例如 jsON、YAML 和 XML。但是你也可以使用第三方序列化器或创建自己的序列化器。你只需要在 settings.py 文件中注册它:

# settings.pySERIALIZATioN_MODULES = {    'my_fORMat': appname.serializers.MyFormatSerializer,}

要创建自己的 MyFormatSerializer,你需要实现 .serialize() 方法并接受一个查询集和其它选项作为参数:

class MyFormatSerializer:    def serialize(self, queryset, **options):        # serious serialization happening

现在,你可以将查询集序列化为新格式:

from django.core import serializers serializers.serialize('my_format', Order.objects.all())

你可以使用选项参数来定义序列化程序的行为。例如,如果要定义在处理 ForeignKeys 时要使用嵌套序列化,或者只希望数据返回其主键,你可以传递一个 flat=True 参数作为选项,并在方法中处理:

class MyFormatSerializer:    def serializer(self, queryset, **options):        if options.get('flat', False):            # don't recursively serialize relationships        # recursively serialize relationships

使用 Django 序列化的一种方法是使用 loaddata 和 dumpdata 管理命令。

DRF 序列化器

在 Django 社区中,Django REST 框架(DRF)提供了最著名的序列化器。尽管你可以使用 Django 的序列化器来构建将在 api 中响应的 JSON,但 REST 框架中的序列化器提供了更出色的功能,可以帮助你处理并轻松验证复杂的数据。

在订单的例子中,你可以像这样创建一个序列化器:

from restframework import serializers class OrderSerializer(serializers.Serializer):    product = serializers.CharField(max_length=255)    customer = serializers.CharField(max_lenght=255)    price = serializers.DecimalField(max_digits=5, decimal_places=2)    date = serializers.DateField()

轻松序列化其数据:

order = Order('pen', 'renato', 10.50, date.today())serializer = OrderSerializer(order) serializer.data# {'product': 'pen', 'customer': 'renato', 'price': '10.50', 'date': '2020-08-16'}

为了能够从数据返回实例,你需要实现两个方法:create 和 update

from rest_framework import serializers class OrderSerializer(serializers.Serializer):    product = serializers.CharField(max_length=255)    customer = serializers.CharField(max_length=255)    price = serializers.DecimalField(max_digits=5, decimal_places=2)    date = serializers.DateField()     def create(self, validated_data):        # 执行订单创建        return order     def update(self, instance, validated_data):       # 执行实例更新       return instance

之后,你可以通过调用 is_valid() 来验证数据,并通过调用 save() 来创建或更新实例:

serializer = OrderSerializer(**data)## 若要验证数据,在调用 save 之前必须执行serializer.is_valid()serializer.save()

模型序列化器

序列化数据时,通常需要从数据库(即你创建的模型)进行数据处理。ModelSerializer 与 ModelForm 一样,提供了一个 API,用于从模型创建序列化器。假设你有一个订单模型:

from django.db import models class Order(models.Model):    product = models.CharField(max_length=255)    customer = models.CharField(max_length=255)    price = models.DecimalField(max_digits=5, decimal_places=2)    date = models.DateField()

你可以像这样为它创建一个序列化器:

from rest_framework import serializers class OrderSerializer(serializers.ModelSerializer):    class Meta:        model = Order        fields = '__all__'

Django 会自动在序列化器中包含所有模型字段,并创建 create 和 udpate 方法。

在基于类的视图(CBV)中使用序列化器

像 Django CBV 中的 Forms 一样,序列化器可以很好地与 DRF 集成。你可以设置 serializer_class 属性,方便序列化器用于视图:

from rest_framework import generics class OrderListCreateAPIView(generics.ListCreateAPIView):    queryset = Order.objects.all()    serializer_class = OrderSerializer

你也可以定义 get_serializer_class() 方法:

from rest_framework import generics class OrderListCreateAPIView(generics.ListCreateAPIView):    queryset = Order.objects.all()       def get_serializer_class(self):        if is_free_order():            return FreeOrderSerializer        return OrderSerializer

在 CBV 中还有其它与序列化器交互的方法。例如,get_serializer() 返回一个已经实例化的序列化器,get_serializer_context() 返回创建实例时传递给序列化器的参数。对于创建或更新数据的视图,有 create 和 update,它们使用 is_valid 方法验证数据,还有 perform_create 和 perform_update 调用序列化器的 save 方法。

感谢各位的阅读,以上就是“怎么在Python Web框架Django中使用序列化器”的内容了,经过本文的学习后,相信大家对怎么在Python Web框架Django中使用序列化器这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么在Python Web框架Django中使用序列化器

本文链接: https://lsjlt.com/news/281631.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么在Python Web框架Django中使用序列化器
    这篇文章主要讲解了“怎么在Python Web框架Django中使用序列化器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python Web框架Django中使用序列化器”吧!序列化...
    99+
    2023-06-15
  • 怎么在python中使用序列化与反序列化
    这篇文章将为大家详细讲解有关怎么在python中使用序列化与反序列化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python有哪些常用库python常用的库:1.requesuts;2.s...
    99+
    2023-06-14
  • Python的Web框架Django怎么安装
    本篇内容主要讲解“Python的Web框架Django怎么安装”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python的Web框架Django怎么安装”吧!简介Python下有许多款不同的 W...
    99+
    2023-07-02
  • Python中怎么使用Django框架开发
    今天就跟大家聊聊有关Python中怎么使用Django框架开发,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。建立Python Django开发框架,实现表单的有效性检验。可以方便的从...
    99+
    2023-06-17
  • Python Django框架中表单怎么使用
    本篇内容介绍了“Python Django框架中表单怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Django保证表单的正...
    99+
    2023-07-02
  • Python的Django REST框架中的序列化及请求和返回
    序列化Serialization 1. 设置一个新的环境 在我们开始之前, 我们首先使用virtualenv要创建一个新的虚拟环境,以使我们的配置和我们的其他项目配置彻底分开。 $mkdir ~/env...
    99+
    2022-06-04
    框架 序列化 Python
  • Python Web框架Django怎么使用jwt获取用户信息
    这篇文章主要介绍“Python Web框架Django怎么使用jwt获取用户信息”,在日常操作中,相信很多人在Python Web框架Django怎么使用jwt获取用户信息问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-01
  • python-django框架中使用Fa
    一、安装FastDFS 1-1:执行docker命令安装 # 安装tracker docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs ...
    99+
    2023-01-31
    框架 python django
  • Spring框架中Redis序列化怎么配置
    在Spring框架中配置Redis序列化需要配置RedisTemplate的序列化器。以下是一个简单的配置示例: @Configur...
    99+
    2024-04-29
    Redis Spring
  • Python中的Web开发框架怎么使用
    这篇文章主要介绍了Python中的Web开发框架怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中的Web开发框架怎么使用文章都会有所收获,下面我们一起来看看吧。在开始之前,我们先要安装好需要...
    99+
    2023-07-06
  • python中如何使用Django框架
    这篇文章将为大家详细讲解有关python中如何使用Django框架,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。第一步:项目的创建与运行第一次使用 Django ,那么你必须要照顾一些初始设...
    99+
    2023-06-20
  • python-django框架中使用七牛
      1:注册七牛云账号        https://www.qiniu.com/   js文件 链接:https://pan.baidu.com/s/1BW1svHqEsXrrTNtRobKkpg  提取码:ixta   2:进行实名认...
    99+
    2023-01-31
    框架 python django
  • 如何使用Django框架在Windows系统上构建Web应用程序?
    Django是一款流行的Python Web框架,它能够帮助开发人员快速构建高质量的Web应用程序。在本文中,我们将探讨如何在Windows系统上使用Django框架构建Web应用程序。 安装Python和pip 在开始使用Django...
    99+
    2023-08-21
    django windows shell
  • Django框架中模型怎么使用
    这篇文章主要介绍“Django框架中模型怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Django框架中模型怎么使用”文章能帮助大家解决问题。Django 对各种数据库提供了很好的支持,包括...
    99+
    2023-07-02
  • 怎么在python中序列化JSON
    今天就跟大家聊聊有关怎么在python中序列化JSON,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比...
    99+
    2023-06-14
  • Python django中如何使用restful框架
    restful框架的使用 在使用django进行前后台分离开发时通常会搭配django-rest-framework框架创建RESTful风格的接口API。框架介绍及版本要求可参考官方地址:https://www.d...
    99+
    2022-06-02
    restful框架的使用 Python django
  • Django框架在Web应用开发中的角色和作用
    Django框架在Web应用开发中的角色和作用,需要具体代码示例 Django是一个以MTV(Model-Template-View)为架构模式的Web应用开发框架,它主要被用于搭建高性能的、功能强大的 Web应用程序。Djan...
    99+
    2024-01-19
    Web应用开发 Django框架 角色和作用
  • 怎么利用Python创建第一个Django框架程序
    这篇文章主要介绍“怎么利用Python创建第一个Django框架程序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么利用Python创建第一个Django框架程序”文章能帮助大家解决问题。一.环境...
    99+
    2023-07-02
  • 如何在Django框架中使用HTTP协议?
    Django是一个流行的Python web框架,它支持多种协议,包括HTTP。在这篇文章中,我们将学习如何在Django框架中使用HTTP协议。 HTTP是一种客户端-服务器协议,用于从web服务器传输超文本到web浏览器。Django框...
    99+
    2023-06-27
    http apache django
  • 如何在 Django 中使用 ASP 框架对象?
    Django 是一个非常流行的 Python Web 框架,它提供了许多功能和工具来帮助开发人员快速构建 Web 应用程序。但是,有时候我们需要在 Django 中使用 ASP 框架对象,以便更好地管理我们的 Web 应用程序。在本篇文章中...
    99+
    2023-11-11
    框架 对象 django
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作