【问题标题】:making hash of data in django rest framework serializers在 django rest 框架序列化程序中对数据进行哈希处理
【发布时间】:2021-12-30 18:01:54
【问题描述】:

我想在我的序列化程序中对某些字段进行 SHA256 哈希并将其设置为同一序列化程序中的另一个字段,这是我的模型:

class Something(models.Model):

x = models.CharField(max_length=300)
y = models.IntegerField()
z = models.IntegerField()
f = models.IntegerField()
hash = models.CharField(max_length=300)

第一个用户定义 x,y,z 和 f。之后我需要像这样自动生成哈希 哈希 = x + y + z + f

我的序列化器:

class SomethingSerializers(serializers.ModelSerializer):
    class Meta:
        model = Something
        fields = ['x', 'y', 'z', 'f', 'hash']

什么是最好的决定?

【问题讨论】:

    标签: python django django-rest-framework sha256


    【解决方案1】:

    您可以添加一个模型属性来计算您的哈希:

    class Something(models.Model):
        x = models.CharField(max_length=300)
        y = models.IntegerField()
        z = models.IntegerField()
        f = models.IntegerField()
    
        @property
        def hash(self):
            return your_hashed_value
    

    【讨论】:

      【解决方案2】:

      您可以添加一个 SerializerMethodField 散列这些值:

      class SomethingSerializers(serializers.ModelSerializer):
          hash = serializers.SerializerMethodField()
      
          class Meta:
              model = Something
              fields = ['x', 'y', 'z', 'f', 'hash']
      
          def get_hash(self, obj):
              return obj.x + obj.y + obj.z + obj.f  # or your custom logic
      

      请注意,这不会将哈希保存在数据库中

      【讨论】:

        【解决方案3】:

        只需像这样覆盖模型的保存方法:

        import hashlib
        
        class Something(models.Model):
            x = models.CharField(max_length=300)
            y = models.IntegerField()
            z = models.IntegerField()
            f = models.IntegerField()
            hash = models.CharField(max_length=300)
              
            def save(self, *args, **kwargs):
                 input = self.x + str(self.y) + str(self.z) + str(self.f)
                 result = hashlib.sha256(input.encode())
                 self.hash = result.hexdigest()
                 super(Something, self).save(*args, **kwargs)
        

        序列化器很好。

        【讨论】:

        • @arashdaneshgar 如果这解决了您的问题,请将我的回答标记为已接受。
        猜你喜欢
        • 2016-03-23
        • 2015-04-12
        • 2016-07-19
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        • 2017-10-03
        • 2019-05-20
        • 1970-01-01
        相关资源
        最近更新 更多