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

Python Django包生成随机字母数字字符串,python,django,Python,Django,我正在构建一个具有独立前端(Angular或其他一些JS库)和后端(Django)的应用程序。为了确保发送到服务器的请求的安全性,我想附加一个url参数,比如说server/someurl?unique\u id=someunique 我将此唯一代码存储在机器的localStorage上一段特定时间。但是,我想在服务器端使用某种函数设置此代码,该函数不仅会生成此随机字母数字文本,还会根据传入的请求对其进行验证 例如: 当用户打开应用程序时,它将发送一个服务器/setCode,该服务器将响应随机生

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

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

例如:

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

在发出请求时,比如说
server/getdata?someparameter=some\u data&unique\u id=string\u from\u local\u storage
,服务器可以根据生成函数进行验证,然后才处理url的其余部分

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

Django提供函数
get\u random\u string()
,该函数将满足字母数字字符串生成要求。您不需要任何额外的包,因为它位于
django.utils.crypto
模块中

>>> from django.utils.crypto import get_random_string
>>> unique_id = get_random_string(length=32)
>>> unique_id
u'rRXVe68NO7m3mHoBS488KdHaqQPD6Ofv'
您还可以使用
允许的字符改变字符集:

>>> short_genome = get_random_string(length=32, allowed_chars='ACTG')
>>> short_genome
u'CCCAAAAGTACGTCCGGCATTTGTCCACCCCT'
有许多其他方法可以生成唯一id,但不一定是字母数字:

  • 模块-使用
    uuid1
    uuid4
    生成唯一的UUID,例如

    >>> import uuid
    >>> my_uuid = uuid.uuid4()
    >>> my_uuid
    UUID('8e6eee95-eae1-4fb4-a436-27f68dbcb6d7')
    >>> str(my_uuid)
    '8e6eee95-eae1-4fb4-a436-27f68dbcb6d7'
    
  • 模块:

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

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

    在Python3.6中,有一个特定的方法用于生成安全的随机URL。这就是方法。

    如果您只需要一个随机字符串,您可以使用stdlib
    uuid
    包。然后,您可以将该值存储在足够长的
    字符域中,或使用可用的UUIDField之一(或等待django 1.8)。噢,哇!谢谢如何在传入请求上验证此字符串?@Newtt hmac.compare_digestPython 3删除了string.uppercase和string.lowercase,因此您需要使用string.ascii_大写和string.ascii_小写instead@KrystianC:谢谢你注意到这一点。我已经将答案更新为使用
    string.ascii_letters
    ,它适用于两个版本的Python。关于
    random
    模块,请参阅文档:“警告:此模块的伪随机生成器不应用于安全目的。请使用os.uradom()或SystemRandom(如果您需要加密安全的伪随机数生成器)。”
    >>> unique_id = '%32x' % random.getrandbits(16*8)
    >>> unique_id
    '5133d2d79ce518113474d8e9f3702638'