2014-09-19 7 views
28

मैं एक ऐप बना रहा हूं जिसमें एक अलग फ्रंट एंड (कोणीय या कुछ अन्य जेएस लाइब्रेरी) और बैकएंड (Django) है। सर्वर पर भेजे जा रहे अनुरोधों की कुछ सुरक्षा सुनिश्चित करने के लिए, मैं एक यूआरएल पैरामीटर जोड़ना चाहता हूं server/someurl?unique_id=Something-unique कहें।Django पैकेज यादृच्छिक अल्फान्यूमेरिक स्ट्रिंग उत्पन्न करने के लिए

मैं इस विशिष्ट कोड को मशीन के localStorage पर एक विशिष्ट समय के लिए संग्रहीत कर रहा हूं। हालांकि, मैं सर्वर कोड पर किसी प्रकार के फ़ंक्शन का उपयोग करके इस कोड को सेट करना चाहता हूं जो न केवल इस यादृच्छिक अल्फान्यूमेरिक टेक्स्ट को उत्पन्न करेगा बल्कि आने वाले अनुरोधों के आधार पर इसे मान्य करेगा।

उदाहरण के लिए:

एक उपयोगकर्ता एप्लिकेशन को खोलता है, यह एक server/setCode जो इस अनियमित रूप से उत्पन्न स्ट्रिंग जो मैं जे एस का उपयोग कर Local Storage को संगृहीत करेगा जवाब देंगे भेज देंगे।

आउटगोइंग अनुरोध पर, server/getdata?someparameter=some_data&unique_id=string_from_local_storage कहें जो सर्वर जेनरेटिंग फ़ंक्शन के विरुद्ध मान्य कर सकता है और केवल तब शेष यूआरएल को संसाधित कर सकता है।

क्या कोई पैकेज या मॉड्यूल है जो मुझे पीढ़ी और सत्यापन प्राप्त करने में मदद कर सकता है? मुझे उम्मीद है कि मैं जो चाहता हूं उसे व्यक्त कर सकता हूं क्योंकि मैं इस काम को लिखने और परीक्षण करने के लिए इस छोटे से लिखने के लिए कोई समाधान नहीं ढूंढ पा रहा हूं।

+0

तो आप सभी की जरूरत एक यादृच्छिक स्ट्रिंग है, तो आप stdlib 'uuid' पैकेज का उपयोग कर सकते हैं। फिर आप उस मान को पर्याप्त रूप से लंबे समय तक 'चारफ़िल्ल्ड' में संग्रहीत कर सकते हैं, या यूयूडफील्ड में से एक का उपयोग कर सकते हैं (या django 1.8 के लिए प्रतीक्षा करें)। –

उत्तर

76

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' 

वहाँ कई अन्य तरीकों में एक विशिष्ट आईडी उत्पन्न करने के लिए, कर रहे हैं हालांकि जरूरी नहीं अल्फानुमेरिक एक:

  1. uuid मॉड्यूल - uuid1 या uuid4 का उपयोग करके एक अद्वितीय यूयूआईडी उत्पन्न करें, उदाहरण के लिए

    >>> import uuid 
    >>> my_uuid = uuid.uuid4() 
    >>> my_uuid 
    UUID('8e6eee95-eae1-4fb4-a436-27f68dbcb6d7') 
    >>> str(my_uuid) 
    '8e6eee95-eae1-4fb4-a436-27f68dbcb6d7' 
    
  2. 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' 
+0

ओह, वाह! धन्यवाद! आने वाले अनुरोधों पर मैं इस स्ट्रिंग को कैसे सत्यापित करूं? – Newtt

+0

@Newtt hmac.compare_digest –

+0

पायथन 3 ने string.uppercase और string.lowercase को हटा दिया है, इसलिए आपको स्ट्रिंग.एएससीआई_अपपरकेस और string.ascii_lowercase का उपयोग करने की आवश्यकता है इसके बजाय – KrystianC

संबंधित मुद्दे