美文网首页
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')
    
    
    
    
    
    
    
    

    相关文章

      网友评论

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

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