Подтвердить что ты не робот

Пакет Django для генерации случайной буквенно-цифровой строки

Я создаю приложение с разделенным интерфейсом (Angular или другой JS-библиотекой) и бэкэнд (Django). Чтобы обеспечить некоторую безопасность запросов, отправляемых на сервер, я хочу добавить параметр url say server/someurl?unique_id=Something-unique.

Я сохраняю этот уникальный код на машине localStorage в течение определенного времени. Однако я хочу установить этот код, используя некоторую функцию на конце сервера, которая не только генерирует этот случайный буквенно-цифровой текст, но и проверяет его на основе входящих запросов.

Например:

Когда пользователь откроет приложение, он отправит server/setCode, который будет отвечать этой случайно созданной строкой, которую я буду хранить в Local Storage с помощью JS.

В исходящем запросе скажите server/getdata?someparameter=some_data&unique_id=string_from_local_storage, который сервер может проверить на функцию генерации, а затем обрабатывать остальную часть URL-адреса.

Есть ли пакет или модуль, который мог бы помочь мне добиться генерации и проверки? Надеюсь, я смогу передать то, что хочу, поскольку не могу найти решения для этого, чтобы не писать функцию для генерации и тестирования.

4b9b3361

Ответ 1

Django предоставляет функцию get_random_string(), которая удовлетворяет требованию генерации буквенно-цифровых символов. Вам не нужен дополнительный пакет, потому что он находится в модуле django.utils.crypto.

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

Вы также можете изменять набор символов с помощью allowed_chars:

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

Существует много других способов генерации уникального идентификатора, но не обязательно алфавитно-цифровой:

  • Модуль uuid - генерирует уникальный UUID с помощью uuid1 или uuid4, например

    >>> import uuid
    >>> my_uuid = uuid.uuid4()
    >>> my_uuid
    UUID('8e6eee95-eae1-4fb4-a436-27f68dbcb6d7')
    >>> str(my_uuid)
    '8e6eee95-eae1-4fb4-a436-27f68dbcb6d7'
    
  • Модуль random:

    >>> 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'
    

Или, если вы не суетитесь о алфавите:

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