我正在构建一个具有独立前端(Angular或其他JS库)和后端(Django)的应用程序。为了确保发送到服务器的请求的某些安全性,我想附加一个url参数说server/someurl?unique_id=Something-unique
。
我将此唯一代码存储在计算机localStorage
上一段特定时间。但是,我想在服务器端使用某种函数设置此代码,这不仅会生成此随机字母数字文本,还会根据传入请求对其进行验证。
例如:
当用户打开应用时,它会发送一个server/setCode
,它将使用随机生成的字符串进行响应,我将使用JS将其存储到Local Storage
。
在传出请求上,说server/getdata?someparameter=some_data&unique_id=string_from_local_storage
服务器可以针对生成函数进行验证,然后只处理其余的URL。
是否有可以帮助我实现生成和验证的软件包或模块? 我希望我可以传达我想要的东西,因为我无法找到任何解决方案,只能编写函数来生成和测试自己。
答案 0 :(得分:108)
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'
还有许多其他方法可以生成唯一ID,但不一定是字母数字:
uuid模块 - 使用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'
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'
答案 1 :(得分:1)
从python 3.6开始,有一个secret module,其中有一种生成安全随机URL的特定方法。这是token_urlsafe
方法。
答案 2 :(得分:0)
您可以使用nanoid:
https://github.com/puyuan/py-nanoid
from nanoid import generate
generate() # => NDzkGoTCdRcaRyt7GOepg