سؤال

كيف أقوم بإنشاء GUID في Python مستقل عن النظام الأساسي؟سمعت أن هناك طريقة تستخدم ActivePython على Windows ولكنها تعمل بنظام Windows فقط لأنها تستخدم COM.هل هناك طريقة تستخدم بايثون عادي؟

هل كانت مفيدة؟

المحلول

توفر وحدة UUID ، في Python 2.5 وما فوق ، توليد UUID المتوافق مع RFC.راجع مستندات الوحدة وRFC للحصول على التفاصيل.[مصدر]

المستندات:

مثال (العمل على 2 و 3):

>>> import uuid
>>> uuid.uuid4()
UUID('bd65600d-8669-4903-8a14-af88203add38')
>>> str(uuid.uuid4())
'f50ec0b7-f960-400d-91f0-c42a6d44e3d0'
>>> uuid.uuid4().hex
'9fe2c4e93f654fdbb24c02b15259716c'

نصائح أخرى

إذا كنت تستخدم Python 2.5 أو إصدار أحدث، فإن وحدة uuid تم تضمينه بالفعل في توزيع Python القياسي.

السابق:

>>> import uuid
>>> uuid.uuid4()
UUID('5361a11b-615c-42bf-9bdb-e2c3790ada14')

ونسخ من: https://docs.python.org/2/library/uuid.html (منذ الروابط نشرت لم تكن نشطة وأنها تبقي تحديث)

>>> import uuid

>>> # make a UUID based on the host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # get the raw 16 bytes of the UUID
>>> x.bytes
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

ويمكنني استخدام GUIDs كما مفاتيح عشوائية لعمليات نوع قاعدة البيانات.

وشكل عشري، مع شرطات والأحرف الزائدة يبدو داع طويلة بالنسبة لي. لكني أحب أيضا أن سلاسل تمثل أرقام ست عشرية هي آمنة جدا لأنها لا تحتوي على أحرف التي يمكن أن تسبب مشاكل في بعض الحالات مثل '+'، '='، وما إلى ذلك ..

وبدلا من عشري، وأنا استخدم سلسلة base64 في-رابط آمن. ولا يتوافق مع أي مواصفات UUID / GUID على الرغم من (البعض من وجود المبلغ المطلوب من العشوائية) التالية.

import base64
import uuid

# get a UUID - URL safe, Base64
def get_a_uuid():
    r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes)
    return r_uuid.replace('=', '')

هذه الوظيفة قابلة للتكوين بالكامل وتقوم بإنشاء معرف فريد بناءً على التنسيق المحدد

على سبيل المثال:- [8, 4, 4, 4, 12]، هذا هو التنسيق المذكور وسيقوم بإنشاء uuid التالي

LxoYNyXe-7hbQ-caJt-DSdU-PDaht56cMEWi

 import random as r

 def generate_uuid():
        random_string = ''
        random_str_seq = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        uuid_format = [8, 4, 4, 4, 12]
        for n in uuid_format:
            for i in range(0,n):
                random_string += str(random_str_seq[r.randint(0, len(random_str_seq) - 1)])
            if n != 12:
                random_string += '-'
        return random_string

إذا كنت تحتاج إلى تمرير UUID لمفتاح أساسي للنموذج الخاص بك أو حقل فريد ثم رمز أدناه بإرجاع كائن UUID -

 import uuid
 uuid.uuid4()

إذا كنت تحتاج إلى تمرير UUID كمعلمة لURL يمكنك القيام به مثل رمز أدناه -

import uuid
str(uuid.uuid4())

إذا كنت تريد أن قيمة عرافة لUUID يمكنك القيام به لأقل من واحد -

import uuid    
uuid.uuid4().hex
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top