Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
407 views
in Technique[技术] by (71.8m points)

python - Django package to generate random alphanumeric string

I'm building an app that has a separated front-end (Angular or some other JS library) and backend (Django). To ensure some security of requests being sent to the server, I want to append a url parameter say server/someurl?unique_id=Something-unique.

I am storing this unique code on the machine's localStorage for a specific time. However, I want to set this code using some sort of function on the server end which will not only generate this random alphanumeric text but also validate it based on incoming requests.

For example:

When a user opens the app, it'll send a server/setCode which will respond with this randomly generated string which I will store to Local Storage using JS.

On an outgoing request, say server/getdata?someparameter=some_data&unique_id=string_from_local_storage which the server can validate against the generating function and only then process the rest of the url.

Is there a package or a module that could help me achieve the generation and validation? I hope I could convey what I want as I'm not able to find any solution for this short of writing the function to generate and test myself.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Django provides the function get_random_string() which will satisfy the alphanumeric string generation requirement. You don't need any extra package because it's in the django.utils.crypto module.

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

You can also vary the set of characters with allowed_chars:

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

There are many other ways to generate a unique id, though not necessarily an alphanumeric one:

  1. The uuid module - generate a unique UUID using uuid1 or uuid4, e.g.

    >>> import uuid
    >>> my_uuid = uuid.uuid4()
    >>> my_uuid
    UUID('8e6eee95-eae1-4fb4-a436-27f68dbcb6d7')
    >>> str(my_uuid)
    '8e6eee95-eae1-4fb4-a436-27f68dbcb6d7'
    
  2. The random module:

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

Or, if you're not fussy about the alphabet:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...