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

New*_*wtt 40 python django

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

我将这个独特的代码存储在机器上localStorage一段特定的时间.但是,我想在服务器端使用某种函数设置此代码,这不仅会生成此随机字母数字文本,还会根据传入请求对其进行验证.

例如:

当用户打开应用程序时,它将发送一个server/setCode将使用此随机生成的字符串进行响应,我将Local Storage使用JS 存储该字符串.

在传出请求中,说明server/getdata?someparameter=some_data&unique_id=string_from_local_storage服务器可以针对生成函数进行验证,然后仅处理其余的URL.

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

mha*_*wke 118

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'
Run Code Online (Sandbox Code Playgroud)

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

>>> short_genome = get_random_string(length=32, allowed_chars='ACTG')
>>> short_genome
u'CCCAAAAGTACGTCCGGCATTTGTCCACCCCT'
Run Code Online (Sandbox Code Playgroud)

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

  1. 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'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 随机模块:

    >>> 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'
    
    Run Code Online (Sandbox Code Playgroud)

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

>>> unique_id = '%32x' % random.getrandbits(16*8)
>>> unique_id
'5133d2d79ce518113474d8e9f3702638'
Run Code Online (Sandbox Code Playgroud)


AK *_* 12 5

从 python 3.6 开始,有一个秘密模块,它具有生成安全随机 url 的特定方法。这是token_urlsafe方法。