美文网首页
Python+Django框架学习(Restful,DRF,序列

Python+Django框架学习(Restful,DRF,序列

作者: 彬_哥哥 | 来源:发表于2024-06-03 17:04 被阅读0次

Restful是目前流行的设计规范,是一组架构约束条件和原则。
GET:获取资源
POST:新建资源
PUT:整体更新资源(列表横列所有字段都需要传入参数)
DELETE:局部更新资源(列表横列指定某一个字段传入参数)
DELETE:删除资源

DRF框架的安装和介绍

安装: pip install djangorestframework

  • 注册应用
INSTALLED_APPS = [
    ...
    # DRF框架应用
    'rest_framework',
]

ERF序列化和反序列化:

  1. JSON序列化:将一个python对象,转换为一个json对象(JSON字符串)
  2. JSON反序列化:将一个json对象(JSON字符串),转换为python对象
序列化器的字段和约束

定义模型类

from django.db import models
# Create your models here.
class UserInfoModel(models.Model):
    # 用户信息模型类
    logo = models.CharField(max_length=20, default=None, verbose_name='软件名', help_text='软件名')
    pwd = models.CharField(max_length=20, default=None, verbose_name='密码', help_text='密码')
    phone = models.CharField(max_length=20, default=None, verbose_name='手机号', help_text='手机号')
    day = models.IntegerField(default=18, verbose_name='天数', help_text='天数')

    def __str__(self):
        return self.logo

    # 指定建表名
    class Meta:
        db_table = 'userinfo'
        verbose_name = '用户信息'

定义序列化器

# 定义DRF框架的序列化器类
from rest_framework import serializers
class UserInfoSerializers(serializers.Serializer):
    # 用户信息序列化器模型类
    logo = serializers.CharField(max_length=20)
    pwd = serializers.CharField(max_length=20)
    phone = serializers.CharField(max_length=20)
    day = serializers.IntegerField(min_value=0, max_value=365)
微信截图_20240527120524.png
关联字段序列化操作

在序列化时,会数据转换为模型类的对象

  • 关联字段序列化方式
# 关联字段序列化的方式
    # 返回关联模型对象的主键
    user1 = serializers.PrimaryKeyRelatedField()
    # 返回关联字段模型类__str__方法返回的内容
    user2 = serializers.StringRelatedField()
    # 返回关联对象序列化器返回的所有字段
    user3 = UserInfoSerializers()
    # 返回关联对象某一个具体字段
    user4 = serializers.SlugRelatedField(read_only=True, slug_field='logo')
  • 定义一个模型类
from django.db import models
# Create your models here.
class UserInfoModel(models.Model):
    # 用户信息模型类
    logo = models.CharField(max_length=20, default=None, verbose_name='软件名', help_text='软件名')
    pwd = models.CharField(max_length=20, default=None, verbose_name='密码', help_text='密码')
    phone = models.CharField(max_length=20, default=None, verbose_name='手机号', help_text='手机号')
    day = models.IntegerField(default=18, verbose_name='天数', help_text='天数')
    def __str__(self):
        return self.logo
    # 指定建表名
    class Meta:
        db_table = 'userinfo'
        verbose_name = '用户信息'

class RelevanceModel(models.Model):
    # 关联UserInfoModel
    user = models.ForeignKey('UserInfoModel', on_delete=models.CASCADE, verbose_name='关联用户表', help_text='关联用户表')
    facility = models.CharField(max_length=20, verbose_name='使用设备', help_text='使用设备')
    machine = models.CharField(max_length=200, verbose_name='机器码', help_text='机器码')
    info = models.CharField(max_length=20, verbose_name='备注信息', help_text='备注信息')

    def __str__(self):
        return self.facility

  • 定义一个序列化器模型类
# 定义DRF框架的序列化器类
from rest_framework import serializers
class UserInfoSerializers(serializers.Serializer):
    # 用户信息序列化器模型类
    logo = serializers.CharField(max_length=20)
    pwd = serializers.CharField(max_length=20)
    phone = serializers.CharField(max_length=20)
    day = serializers.IntegerField(min_value=0, max_value=365)
    id = serializers.IntegerField()
class RelevanceSerializers(serializers.Serializer):
    facility = serializers.CharField(max_length=20)
    machine = serializers.CharField(max_length=200)
    info = serializers.CharField(max_length=20)
    id = serializers.IntegerField()
    # 关联字段序列化的方式
    # 返回关联字段模型类__str__方法返回的内容
    user1 = serializers.StringRelatedField()
反序列化操作

在反序列化时,会先对对象数据进行验证,验证通过再进行保存
把数据转换为模型类的对象

# 定义DRF框架的序列化器类
from rest_framework import serializers
class UserInfoSerializers(serializers.Serializer):
    # 用户信息序列化器模型类
    logo = serializers.CharField(max_length=20)
    pwd = serializers.CharField(max_length=20)
    phone = serializers.CharField(max_length=20)
    day = serializers.IntegerField(min_value=0, max_value=365)
    # read_only=True是不需要校验的字段
    id = serializers.IntegerField(read_only=True)


备注:
# 定义DRF框架的序列化器类
class UserInfoSerializers(serializers.ModelSerializer):
    # 用户信息序列化器模型类
    class Meta:
        # 指明参照哪个模型类
        model = UserInfoModel
        # 指明为模型类的哪些字段生成,__all__是所有字段
        fields = '__all__'
        # 可以指明只读的字段,不参与反序列化
        # read_only_fields = ('id', 'pwd')
        # 指定序列化字段,反序列化的时候只会对指定序列化字段操作
        # fields = ('logo', 'pwd')
        # 修改字段的校验规则(反序列化的校验规则)
        extra_kwargs = {
            'phone': {'max_length': 11, 'min_length': 11, 'required': True}
        }
        # 可以排除指定字段,指定不参与序列化
        exclude = ('logo', 'pwd')







相关文章

  • Django Rest Framework

    DRF是Django的扩展,用于实现 Restful 提供了序列化器 Serializer 、更多的视图类、Mix...

  • 5、Django之Django REST Framework框架

    一、简介 它是在Django基础之上,进行了二次开发 主要用于构建Restful API 简称为DRF框架或者RE...

  • DRF使用篇(五):序列化器ModelSerializer

    如果想为Django存在的模型类快速创建序列化器,可以使用DRF框架封装好的ModelSerializer模型类序...

  • RPC简介及框架选择

    简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点。常见RPC框架,gRPC及序列化...

  • RPC简介及框架选择

    简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点。常见RPC框架,gRPC及序列化...

  • 框架的序列化与反序列化

    DRF 使用Django rest_framework实现rest api; RESTful设计方法 1.域名 2...

  • Django ERST framework 介绍

    Django ERST framework----》drf 序列化:把模型数据转成可传输的数据就叫序列化。 反序列...

  • DRF之视图

    DRF框架包含序列化器,视图以及URL视图,三者密不可分,因此本篇聊的是视图部分。在django中rest_fra...

  • DRF使用记录(三) - 视图

    drf使用记录(三) - 视图 视图之前还忘记了点啥 模型类序列化器 DRF为我们提供了ModelSerializ...

  • RESTful框架学习记录

    引用自知乎@Ivony的一句话 用URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操...

网友评论

      本文标题:Python+Django框架学习(Restful,DRF,序列

      本文链接:https://www.haomeiwen.com/subject/vguqqjtx.html