django:如何从数据库对象的主键中散列URL?

rad*_*von 5 python django url hash design-patterns

我正在尝试为我的数据库对象生成URL.我已经读过我不应该使用URL的主键,并且存根不是这个特定模型的好选择.根据该链接中的建议,我在Python解释器中使用zlib.crc32(),发现值通常会返回负数,而我的URL中不需要这些数字.我应该使用更好的哈希来生成我的URL吗?

更新:我最终使用David提出的按位XOR屏蔽方法,并且它的工作非常好.感谢大家的投入.

Dav*_*ver 12

首先,"不要在URL中使用主键"只是一个非常弱的准则.如果您正在使用增量整数ID 您不想透露这些数字,那么您可以对它们进行一些混淆.例如,您可以使用:masked_id = entity.id ^ 0xABCDEFABunmasked_id = masked_id ^ 0xABCDEFAB.

其次,您链接的文章非常可疑.我不相信.首先,CRC32是一种单向散列函数:通常不可能(通常)采用CRC32散列并返回用于创建该散列的字符串.您会注意到他没有告诉您如何查找Customer给定的CRC32 pk.其次,文章中的代码甚至没有意义.该zlib.crc32函数需要一个字节字符串,而Customer.id它将是一个整数.

第三,如果你想使用一个slug作为URL,要小心:如果slug改变了,你的URL也会改变.这可能没问题,但这是你需要考虑的事情.