【发布时间】:2018-04-21 06:32:12
【问题描述】:
我目前正在学习如何为我的公司构建 API。我已经很久没有这样做了,所以我现在基本上是一名初级开发人员。
按照一些教程,我使用基于类的视图启动并运行了我的 API。
以前,我将“id”作为我的几个序列化程序的字段之一。我的经理不喜欢这样,他指出这会泄露有关我们业务的潜在敏感信息(如果您的 JSON 获得 customer_id = 13,那么您可以推断还有 12 个其他客户,如果您获得 job_id = 5433,那么您可以推断出还有 5432 个其他工作,等等)。
我试图弄清楚如何在不泄露此类信息的情况下将“id”添加到我的序列化程序的字段中,以帮助查找参数和 url。
以前,客户在 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'),)
关于 serializers.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 generate unique ID”,但我得到了不相关的结果,或者我不够先进,无法解析结果并找到我需要的东西。正如我所提到的,我对此很陌生,但解决问题很有趣!
【问题讨论】:
标签: python json django rest django-rest-framework