Вот то, что я использую:
import base64
import uuid
base64.urlsafe_b64encode(uuid.uuid4().bytes)
Я генерирую uuid, но я использую байты вместо шестнадцатеричной версии большего размера или байта с тире.Затем я кодирую его в строку base-64, безопасную для URL.Это строка с более короткой длиной, чем при использовании hex, но использование base64 делает ее так, чтобы символы в строке были безопасны для файлов, URL-адресов и большинства других вещей.
Одна проблема заключается в том, что даже с кодом urlsafe_b64encode он всегдахочет подписать '=' на конце, которые не так безопасны для URL.Знаки '=' предназначены для декодирования закодированной в base-64 информации, поэтому, если вы пытаетесь только генерировать случайные строки, вы, вероятно, можете безопасно удалить их с помощью:
str.replace('=', '')