Antes de começar a trabalhar estava pensando em um sisteminha simples que quero fazer, em que não quero usar uma chave primária com auto increment, nem um uuid, por que será realmente um sisteminha muito simples que vai servir apenas para ilustrar algumas coisas e autenticação e segurança não é uma delas.

Me lembrei da possibilidade de gerar uma pequena quantidade de bytes e converter para hexa, o que para o propósito do projeto já será mais que suficiente, em javascript eu ja fiz isso, acho que com a função crypto.randomBytes.

Em Python, ja que o sistema será em Python, a primeira coisa que vem a cabeça para gerar bytes aleatórios é a função os.urandom, que funcionaria, ou o óbvio: pacote random.

Quando entrei na doc do pacote random dessa vez prestei atenção em um warning que até hoje nunca tinha dado atenção:

Warning The pseudo-random generators of this module should not be used for security purposes. For security or cryptographic uses, see the secrets module.

Existe, desde o 2015 com o python 3.6 (PEP-506), um módulo exclusivo para criptografia em python, e para gerar valores aleatórios bem mais seguros que os do pacote random.

O pacote secrets, tem de tudo um pouco, escolher elemento de uma lista, bytes aleatórios, token, token para url, token em bytes, token em hexadecimal, e por ai vai.

Por exemplo: eu vou usar a função secrets.token_hex, para gerar apenas 2 bytes aleatórios, que convertidos para hexadecimal vai me dar apenas 4 caracteres para usar de IDs nesse projeto.

>>> secrets.token_hex(2)
'ea1c'