2014-09-19 17 views
28

Ich baue eine App mit einem getrennten Front-End (Angular oder eine andere JS-Bibliothek) und einem Backend (Django). Um die Sicherheit zu gewährleisten, dass Anfragen an den Server gesendet werden, möchte ich einen URL-Parameter say server/someurl?unique_id=Something-unique anfügen.Django-Paket zum Generieren von zufälligen alphanumerischen Zeichenfolgen

Ich speichere diesen eindeutigen Code localStorage der Maschine für eine bestimmte Zeit. Ich möchte diesen Code jedoch mit einer Art Funktion auf dem Server-Ende festlegen, die nicht nur diesen zufälligen alphanumerischen Text erzeugt, sondern ihn auch auf der Grundlage eingehender Anfragen validiert.

Zum Beispiel:

Wenn ein Benutzer der App öffnet, es wird ein server/setCode senden, die mit dieser zufällig generierte Zeichenfolge reagieren, die ich Local Storage speichere JS verwenden.

Bei einer ausgehenden Anfrage sagen Sie server/getdata?someparameter=some_data&unique_id=string_from_local_storage, die der Server gegen die generierende Funktion validieren kann und nur dann den Rest der URL verarbeiten.

Gibt es ein Paket oder ein Modul, mit dem ich die Generierung und Validierung erreichen kann? Ich hoffe, ich könnte vermitteln, was ich will, da ich keine Lösung für dieses kurze Schreiben der Funktion finden kann, um mich selbst zu erzeugen und zu testen.

+0

Wenn alles, was Sie brauchen eine zufällige Zeichenfolge, Sie könnte das Paket stdlib 'uuid' verwenden. Sie können diesen Wert dann in einem ausreichend langen "CharField" speichern oder eines der verfügbaren Uuidfields verwenden (oder auf Django 1.8 warten). –

Antwort

76

Django stellt die Funktion get_random_string() zur Verfügung, die die Anforderung zur Erzeugung alphanumerischer Zeichenfolgen erfüllt. Sie benötigen kein zusätzliches Paket, da es sich um das Modul django.utils.crypto handelt.

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

Sie können auch variieren, um die Menge von Zeichen mit allowed_chars:

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

Es gibt viele andere Möglichkeiten, um eine eindeutige ID zu erzeugen, wenn auch nicht unbedingt eine alphanumerische ein:

  1. Das uuid Modul - generieren Sie eine eindeutige UUID mit uuid1 oder uuid4, z

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

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

Oder, wenn Sie über das Alphabet nicht pingelig sind:

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

Oh, wow! Vielen Dank! Wie validiere ich diese Zeichenfolge bei eingehenden Anfragen? – Newtt

+0

@Newtt hmac.compare_digest –

+0

Python 3 entfernt string.uppercase und string.lowercase, so dass Sie brauchen string.ascii_uppercase und string.ascii_lowercase statt – KrystianC

Verwandte Themen