繁体   English   中英

在 django rest 框架序列化程序中制作 hash 数据

[英]making hash of data in django rest framework serializers

我想在我的序列化程序中制作一些字段的 SHA256 hash 并将其设置为同一序列化程序中的另一个字段,这是我的 model:

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。 之后我需要像这样自动生成 hash hash = x + y + z + f

我的序列化器:

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

什么是最好的决定?

您可以添加一个 model 属性来计算您的 hash:

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

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

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)

序列化器很好。

您可以添加一个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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM