我知道有类似的问题(例如this,this,this和this)但我有特定的要求,并寻找更便宜的方法以下(关于Django 1.10.2):
希望不在网址中包含顺序/可猜测的整数ID,并且理想情况下符合以下要求:
注意:从长远来看,该应用程序可能会有500万条记录。
答案 0 :(得分:4)
在SO,博客等方面研究了很多选项后,我最终做了以下事情:
此解决方案有助于实现:
它没有帮助实现/任何缺点:
作为参考,看起来有很多方法可以生成我在路上发现的随机ID(比如Django的get_random_string,Python的随机,Django的UUIDField等)以及编码当前的许多方法ID(基数36,基数62,异或,什么不是)。 编码的ID也可以存储为另一个(索引的)字段,并且每次都会查找(例如here)但是取决于Web应用程序的性能参数(因为查找varchar id不太容易查找整数id)。这个标识符字段既可以从覆盖模型的save()函数中保存,也可以使用post_save()信号保存(参见here)(两种方法都需要为每个插入调用save()函数两次)。
所有人都倾向于对上述方法进行优化。我喜欢SO和社区。每次在这里学到很多东西。
更新:在这篇文章发表一年多之后,我发现了这个名为hashids的优秀图书馆,它做得非常相似!它有多种语言版本,包括Python。