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