gpt4 book ai didi

python - Django休息框架: Generate a unique obfuscated ID from ID field

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:33 25 4
gpt4 key购买 nike

我目前正在学习如何为我的公司构建 API。我从事这行的时间并不长,所以目前我基本上还是一名初级开发人员。

按照一些教程,我使用基于类的 View 在非常基本的级别上启动并运行了 API。

以前,我将“id”作为我的几个序列化器的字段之一。我的经理不喜欢这样,他指出这会泄露有关我们业务的潜在敏感信息(如果您的 JSON 得到 customer_id = 13,那么您可以推断还有 12 个其他客户,如果您得到 job_id = 5433 那么您可以推断还有 5432 个其他工作等)。

我正在尝试找出如何将“id”添加到我的序列化器字段而不泄露此类信息,以帮助查找参数和网址。

以前,客户在 API 上的 URL 为 www.example.com/api/customer/5,5 是数据库中的“pk”,并将返回该客户的 JSON 数据。

我不知道如何使用 pk,但以某种方式混淆它。

models.py 上的客户模型

class Customer(models.Model):
company_name = models.CharField(max_length=100)
contact_name = models.CharField(max_length=100)
contact_email = models.CharField(max_length=100)
user = models.OneToOneField(User)

@staticmethod
def get_absolute_url():
return reverse('details')

def __str__(self):
return self.company_name + ', ' + self.contact_name + ' (' + .contact_email + ')'

class Meta:
unique_together=(('contact_email','user'),)

关于序列化器.py

class CustomerListSerializer(ModelSerializer):
url = HyperlinkedIdentityField(
view_name='api:customer_list_detail',
lookup_field='pk'
)
delete_url = HyperlinkedIdentityField(
view_name='api:customer_list_delete',
lookup_field='pk'
)
user = SerializerMethodField()
class Meta:
model = Customer
fields = [
'id',
'url',
'company_name',
'contact_name',
'contact_email',
'user',
'delete_url'
]
def get_user(self, obj):
return str(obj.user.name)

我尝试过的:

id = str(serializers.UUIDField(format=hex))

它只是返回与之前相同的 ID。我以为这是一种生成唯一编号的方法,但似乎并非如此。

我尝试在谷歌上搜索“django rest api generated unique ID”,但我得到了不相关的结果,或者我还不够先进,无法解析结果并找到我需要的内容。正如我所提到的,我对此很陌生,但是解决问题很有趣!

最佳答案

我不知道这是否适合您的情况,但我建议您可以向模型添加另一个唯一字段,而不是混淆现有的 ID 字段:a UUIDField

这样,您可以将“uuid”而不是“id”传递给序列化器,然后使用“uuid”进行查找(因为它保证也是唯一的)。这样,您就不会泄露数据量,同时仍然能够执行查询。

不过,在向现有模型添加唯一字段时应小心。幸运的是,django docs 中有一个关于将 UUIDField 精确添加到现有模型的示例。 .

希望这有帮助!

关于python - Django休息框架: Generate a unique obfuscated ID from ID field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47181946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com