我即将开始开发一个新的Web应用程序。其中一部分将为用户提供可自定义的网页,这些网页需要具有唯一的URL。
如果按照Django默认的方式,它会给模型分配一个标准的AUTOINCREMENT
ID。虽然这样工作得非常好,但它看起来不那么美观,而且也使网页变得非常可预测(在这种情况下是不希望的)。
与其使用1、2、3、4这样的数字编号,我想要设置固定长度的随机生成的字母数字字符串(例如h2esj4)。由36个字符组成的6位字符串可以给我超过20亿个组合,这在目前阶段应该足够了。当然,如果以后能够扩展,那就更好了。
但存在两个问题:
随机字符串有时可能拼出不良单词或其他令人不悦的短语。有没有一个不错的方法来避免这个问题呢?公平地说,我可能会接受一个数字字符串,但这会大大增加冲突的可能性。
如何让Django(或数据库)在插入时做重复检查?我不想先插入数据再计算主键(因为那不是一个好的方法)。我假设还需要注意并发问题,如果同时生成了两个新页面,并且第二个页面(出奇迹地)在第一个提交之前获得了与第一个相同的主键。
我认为这与URL缩短器生成其ID的方式没有太大区别。如果有一个不错的Django实现的URL缩短器,我可以借鉴它。