Django包生成随机的字母数字字符串

时间:2022-11-24 21:45:33

I'm building an app that has a separated front-end (Angular or some other JS library) and backend (Django). To ensure some security of requests being sent to the server, I want to append a url parameter say server/someurl?unique_id=Something-unique.

我正在构建一个应用程序,它有一个独立的前端(有棱角的或其他一些JS库)和后端(Django)。为了确保发送到服务器的请求的安全性,我想附加一个url参数,比如server/someurl?unique_id= something unique。

I am storing this unique code on the machine's localStorage for a specific time. However, I want to set this code using some sort of function on the server end which will not only generate this random alphanumeric text but also validate it based on incoming requests.

我将这个惟一的代码存储在机器的localStorage中,时间是特定的。但是,我想在服务器端使用某种函数来设置这个代码,它不仅会生成这个随机的字母数字文本,还会根据传入的请求来验证它。

For example:

例如:

When a user opens the app, it'll send a server/setCode which will respond with this randomly generated string which I will store to Local Storage using JS.

当用户打开应用程序时,它将发送一个服务器/setCode,它将使用这个随机生成的字符串进行响应,我将使用JS将其存储到本地存储中。

On an outgoing request, say server/getdata?someparameter=some_data&unique_id=string_from_local_storage which the server can validate against the generating function and only then process the rest of the url.

在发出请求时,说服务器/getdata?someparameter=some_data&unique_id=string_from_local_storage,服务器可以对生成函数进行验证,然后只处理url的其余部分。

Is there a package or a module that could help me achieve the generation and validation? I hope I could convey what I want as I'm not able to find any solution for this short of writing the function to generate and test myself.

是否有一个包或模块可以帮助我实现生成和验证?我希望我能表达我想要的,因为我无法找到任何解决方法来编写函数来生成和测试我自己。

1 个解决方案

#1


82  

Django provides the function get_random_string() which will satisfy the alphanumeric string generation requirement. You don't need any extra package because it's in the django.utils.crypto module.

Django提供了get_random_string()函数,该函数将满足字母数字字符串生成需求。你不需要额外的包裹,因为它在djangol .utils。加密模块。

>>> from django.utils.crypto import get_random_string
>>> unique_id = get_random_string(length=32)
>>> unique_id
u'rRXVe68NO7m3mHoBS488KdHaqQPD6Ofv'

You can also vary the set of characters with allowed_chars:

您还可以使用allowed_chars更改字符集:

>>> short_genome = get_random_string(length=32, allowed_chars='ACTG')
>>> short_genome
u'CCCAAAAGTACGTCCGGCATTTGTCCACCCCT'

There are many other ways to generate a unique id, though not necessarily an alphanumeric one:

有许多其他方法可以生成唯一的id,但不一定是字母数字1:

  1. The uuid module - generate a unique UUID using uuid1 or uuid4, e.g.

    uuid模块——使用uuuid1或uuid4生成唯一的uuid,例如。

    >>> import uuid
    >>> my_uuid = uuid.uuid4()
    >>> my_uuid
    UUID('8e6eee95-eae1-4fb4-a436-27f68dbcb6d7')
    >>> str(my_uuid)
    '8e6eee95-eae1-4fb4-a436-27f68dbcb6d7'
    
  2. The random module:

    随机模块:

    >>> import random
    >>> import string
    >>> allowed_chars = ''.join((string.ascii_letters, string.digits))
    >>> unique_id = ''.join(random.choice(allowed_chars) for _ in range(32))
    >>> unique_id
    '121CyaSHHzX8cqbgLnIg1C5qNrnv21uo'
    

Or, if you're not fussy about the alphabet:

或者,如果你对字母表不挑剔的话:

>>> unique_id = '%32x' % random.getrandbits(16*8)
>>> unique_id
'5133d2d79ce518113474d8e9f3702638'

#1


82  

Django provides the function get_random_string() which will satisfy the alphanumeric string generation requirement. You don't need any extra package because it's in the django.utils.crypto module.

Django提供了get_random_string()函数,该函数将满足字母数字字符串生成需求。你不需要额外的包裹,因为它在djangol .utils。加密模块。

>>> from django.utils.crypto import get_random_string
>>> unique_id = get_random_string(length=32)
>>> unique_id
u'rRXVe68NO7m3mHoBS488KdHaqQPD6Ofv'

You can also vary the set of characters with allowed_chars:

您还可以使用allowed_chars更改字符集:

>>> short_genome = get_random_string(length=32, allowed_chars='ACTG')
>>> short_genome
u'CCCAAAAGTACGTCCGGCATTTGTCCACCCCT'

There are many other ways to generate a unique id, though not necessarily an alphanumeric one:

有许多其他方法可以生成唯一的id,但不一定是字母数字1:

  1. The uuid module - generate a unique UUID using uuid1 or uuid4, e.g.

    uuid模块——使用uuuid1或uuid4生成唯一的uuid,例如。

    >>> import uuid
    >>> my_uuid = uuid.uuid4()
    >>> my_uuid
    UUID('8e6eee95-eae1-4fb4-a436-27f68dbcb6d7')
    >>> str(my_uuid)
    '8e6eee95-eae1-4fb4-a436-27f68dbcb6d7'
    
  2. The random module:

    随机模块:

    >>> import random
    >>> import string
    >>> allowed_chars = ''.join((string.ascii_letters, string.digits))
    >>> unique_id = ''.join(random.choice(allowed_chars) for _ in range(32))
    >>> unique_id
    '121CyaSHHzX8cqbgLnIg1C5qNrnv21uo'
    

Or, if you're not fussy about the alphabet:

或者,如果你对字母表不挑剔的话:

>>> unique_id = '%32x' % random.getrandbits(16*8)
>>> unique_id
'5133d2d79ce518113474d8e9f3702638'