python - 如何在每次创建页面时生成一定长度的随机 url?

标签 python url data-structures pyramid

在我的 python/pyramid 应用程序中,我让用户生成存储在 amazon s3 存储桶中的 html 页面。我希望每个页面都有一个单独的路径,例如 www.domain.com/2cxj4kl。我已经想出如何生成随机字符串以放入 url,但我更关心重复项。我如何根据现有字符串列表检查这些字符串中的每一个,以便不覆盖任何内容?我可以将每个字符串放入字典或数组中,并在每次创建新数组时检查不断增长的数组/字典吗?继续增长这样的对象是否存在问题,它会以某种方式永久存在于应用程序内存中吗?我该怎么做?

最佳答案

在一些存储中存储现有标识符列表并将新标识符与该列表进行比较的方法在一个简单的情况下会起作用,但是,如果您必须存储,比如说,数十亿个标识符,或者如果您想在不止一台机器上生成它们。这也使存储列表、检索、比较等的事情变得复杂。更不用说锁定了——如果两个用户决定在同一秒创建一个页面怎么办?

通用唯一标识符 (UUID) 有一个 very-very low chance of collision - 比我们的星球在接下来的五分钟内被黑洞吞噬的可能性要低得多。如此之低以至于出于任何实际目的您都可以忽略它。

Python 有一个名为 uuid 的库生成 UUID

>>> import uuid
>>> # make a random UUID
>>> u = uuid.uuid4()
>>> u.hex
'f3db6f9a34ed48938a45113ac4b5f156'

生成的字符串有 32 个字符长,这对您来说可能太长了。

或者,您可以像这样生成一个随机字符串:

''.join(random.choice(string.ascii_letters + string.digits) for x in range(12))

在 10-15 个字符长时,它可能不如 UUID 随机,但发生冲突的可能性仍然比亚马逊数据中心的看门人精神错乱、破坏您的服务器的可能性低得多一把斧头并点燃了数据中心:)

关于python - 如何在每次创建页面时生成一定长度的随机 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15261000/

相关文章:

python - 使用BeautifulSoup提取网页标题中的部分文本

python - 获取函数导入路径

python - 为什么 urllib.parse 不分割 URL <scheme> :<number> correctly in all cases?

python - 想要使用 python 将 url 链接添加到 .csv 数据源

algorithm - 如何聚类大型数据集

python - 组织下载的 python 库

python - `emoji` 和 `django-emoji` 包名冲突

javascript - js 在使用 history.pushstate 后设置默认 url

linux - 队列的实现给出运行时错误

database - 修改预购和仅预购有什么区别?