2014-09-19 16 views
28

Ayrılmış bir ön uç (Açısal veya başka bir JS kitaplığı) ve arka uç (Django) olan bir uygulama yapıyorum. Sunucuya gönderilen isteklerin bir miktar güvenliğini sağlamak için, server/someurl?unique_id=Something-unique no'lu bir url parametresi eklemek istiyorum.Rastgele alfanümerik dize oluşturmak için Django paketi

Bu benzersiz kodu, makinenin localStorage belirli bir saatinde saklıyorum. Bununla birlikte, bu kodu sunucu ucunda sadece rastgele alfanümerik bir metin oluşturmakla kalmayacak, aynı zamanda gelen isteklere göre doğrulayacaktır. Örneğin

:

kullanıcının uygulamayı açma

, ben JS kullanarak Local Storage için depolayacak bu rasgele oluşturulmuş dizeyle cevap verecektir bir server/setCode göndereceğiz.

Giden bir istekte, sunucunun üretme işlevine karşı geçerli olduğu ve yalnızca URL'nin geri kalanını işleyebileceği server/getdata?someparameter=some_data&unique_id=string_from_local_storage deyin.

Üretimi ve doğrulamayı gerçekleştirmeme yardımcı olabilecek bir paket veya modül var mı? Umarım istediğim şeyi aktarabilirim, çünkü bu kısa yazımda kendimi üretmek ve test etmek için bir işlev yazamadım.

+0

tek ihtiyacınız bir rasgele dize ise, stdlib 'uuid 'paketini kullanabilir. Daha sonra, bu değeri yeterince uzun bir "CharField" içinde depolayabilir veya mevcut uuidfields öğelerinden birini kullanabilirsiniz (veya django 1.8'i bekleyin). –

cevap

76

Django, alfanümerik dize oluşturma gereksinimini karşılayacak get_random_string() işlevini sağlar. django.utils.crypto modülünde olduğundan fazla pakete ihtiyacınız yoktur.

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

Ayrıca allowed_chars ile karakterlerin kümesini değişebilir:

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

benzersiz bir kimlik oluşturmak için birçok yolu var, biri mutlaka bir alfanümerik olsa:

  1. uuid modülü - uuid1 veya uuid4 kullanarak benzersiz bir UUID üretir.

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

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

Veya, alfabenin hakkında telaşlı değilseniz:

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

Oh, vay! Teşekkürler! Bu dizeyi gelen isteklerde nasıl doğrularım? – Newtt

+0

@Newtt hmac.compare_digest –

+0

Python 3 string.uppercase ve string.lowercase öğesini kaldırdınız, böylece string.ascii_uppercase ve string.ascii_lowercase öğesini kullanmanız gerekiyor. – KrystianC

İlgili konular