Hướng dẫn generate random unique string python - tạo python chuỗi duy nhất ngẫu nhiên

Tôi có một trường duy nhất, được đặt tên là 'SystemCode' trong rất nhiều mô hình của tôi. Và tôi đang tạo điều này theo cách thủ công, nhưng đôi khi nó cũng có thể lấy giá trị từ đầu vào của người dùng, vì vậy tôi phải kiểm tra giá trị này trước khi lưu và nếu nó khớp với nhau, tái tạo giá trị này như một giá trị duy nhất.systemCode' within a lot of my models. And I am generating this manually, but also sometimes it can take value from user input, so I have to check this value before saving and if it matches , regenerating this value as a unique value.

Và đây là cách tôi tạo ra các chuỗi độc đáo trong kịch bản này:


Đây là mô hình lớp tiêu chuẩn của tôi:

class ClassOne(models.Model):
   name = models.CharField(max_length=100)
   systemCode = models.CharField(max_length=25, blank=True, null=True, unique=True)
   ....

Tôi đang sử dụng Phương thức Save () để tạo và kiểm tra SystemCode này là duy nhất:systemCode is unique :

    def save(self, *args, **kwargs):
        systemCode = self.systemCode
        if not systemCode:
            systemCode = uuid.uuid4().hex[:6].upper()
        while ClassOne.objects.filter(systemCode=systemCode).exclude(pk=self.pk).exists():
            systemCode = uuid.uuid4().hex[:6].upper()
        self.systemCode = systemCode
        super(ClassOne, self).save(*args, **kwargs)

Nhưng tôi có cùng một trường SystemCode trong tất cả các mô hình của tôi. Vì vậy, tôi đang sử dụng một hàm để tạo giá trị.systemCode field in all my Models. So I am using a function to generate value.

Vì vậy, đây là cách tạo giá trị duy nhất cho tất cả các mô hình bằng hàm SavesystemCode ():saveSystemCode() function :

import uuid 

def saveSystemCode(inClass, inCode, inPK, prefix):
    systemCode = inCode
    if not systemCode:
        systemCode = uuid.uuid4().hex[:6].upper()

    while inClass.objects.filter(systemCode=systemCode).exclude(pk=inPK).exists():
        systemCode = uuid.uuid4().hex[:6].upper()

    return systemCode

class ClassOne(models.Model):
    name = models.CharField(max_length=100)
    systemCode = models.CharField(max_length=25, blank=True, null=True, unique=True)
    ....

    def save(self, *args, **kwargs):
        self.systemCode = saveSystemCode(ClassOne, self.systemCode, self.pk, 'one_')
        super(ClassOne, self).save(*args, **kwargs)


class ClassTwo(models.Model):
    name = models.CharField(max_length=100)
    systemCode = models.CharField(max_length=25, blank=True, null=True, unique=True)
    ....

    def save(self, *args, **kwargs):
        self.systemCode = saveSystemCode(ClassTwo, self.systemCode, self.pk, 'two_')
        super(ClassTwo, self).save(*args, **kwargs)

class ClassThree(models.Model):
    name = models.CharField(max_length=100)
    systemCode = models.CharField(max_length=25, blank=True, null=True, unique=True)
    ....

    def save(self, *args, **kwargs):
        self.systemCode = saveSystemCode(ClassThree, self.systemCode, self.pk, 'three_')
        super(ClassThree, self).save(*args, **kwargs)

trong khi vòng lặp trong hàm 'SavesystemCode' đang ngăn chặn lại cùng một giá trị.saveSystemCode' function is preventing to save same value again.

Đối với điều này, chúng tôi vượt qua một đối số khác ‘K, biểu thị kích thước của chuỗi. Phương thức này trả về một danh sách các ký tự và do đó chúng tôi sử dụng phương thức tham gia để chuyển đổi nó thành một chuỗi.

Chuỗi trong các trường hợp khác nhau:

  • Trong phương thức trước, chúng tôi đã sử dụng String.ascii_LowerCase. Chúng ta hãy thử các chữ cái liên tục, chúng ta cũng có thể kết hợp hai loại hằng số khác nhau.
  • Chuỗi ngẫu nhiên ở chữ hoa:
  • Sử dụng String.ascii.letters:
  • Kết hợp các loại hằng số chuỗi khác nhau:
  • Bớt tư tưởng

Nhập chuỗi và mô -đun ngẫu nhiên:

Để tạo các chuỗi ngẫu nhiên trong Python, chúng tôi sử dụng chuỗi và mô -đun ngẫu nhiên. Mô-đun chuỗi chứa các hằng số chuỗi ASCII trong các trường hợp văn bản, chữ số, v.v ... Mặt khác, mô-đun ngẫu nhiên được sử dụng để tạo các giá trị giả ngẫu nhiên. Trong phương pháp cuối cùng, chúng tôi sẽ sử dụng mô -đun Bí mật để giúp chúng tôi tạo ra các chuỗi bảo mật bằng mã hóa.

Tạo chuỗi ngẫu nhiên Python:

Chuỗi ngẫu nhiên thường được tạo ra và sử dụng rộng rãi. Mặc dù chúng phục vụ một số lượng lớn các trường hợp sử dụng, nhưng các trường hợp phổ biến nhất là tên người dùng giữ chỗ ngẫu nhiên, số điện thoại ngẫu nhiên, mật khẩu, v.v.

Mô -đun chuỗi

Trước khi chúng tôi sử dụng mô -đun chuỗi để tạo một chuỗi ngẫu nhiên, chúng ta hãy xem xét các loại hằng số chuỗi khác nhau có sẵn.

  1. String.ascii_letters - Trả về một chuỗi các chữ cái chứa các trường hợp khác nhau.
  2. String.ascii_LowerCase - Trả về một chuỗi với các chữ cái bằng chữ thường.
  3. String.ascii_uppercase - Trả về một chuỗi với các chữ cái trong chữ hoa.
  4. String.digits - Trả về một chuỗi chứa các chữ số
  5. String.Punction - Trả về một chuỗi chứa dấu chấm câu

Tôi đã liệt kê hằng số chuỗi được sử dụng phổ biến nhất. Tuy nhiên, bạn có thể xem toàn bộ danh sách trên tài liệu mô -đun (mô -đun chuỗi).

Mô -đun ngẫu nhiên:

Mô -đun ngẫu nhiên khá đơn giản. Nó giúp chúng tôi chọn một nhân vật ngẫu nhiên. Chúng tôi sử dụng phương pháp này để chọn các ký tự từ hằng số chuỗi. Tuy nhiên, có hai chuỗi quan trọng mà bạn nên biết:

  • Random.Choices - Trả về các phần tử một cách ngẫu nhiên. Ở đây các nhân vật không thể là duy nhất.
  • Random.sample - Trả về các yếu tố duy nhất.

Vì vậy, trong khi tạo ra một chuỗi ngẫu nhiên trong Python, nếu bạn ổn với các ký tự lặp lại, bạn có thể sử dụng phương thức thứ nhất và phương pháp thứ hai nếu bạn muốn các ký tự duy nhất.

Mã và giải thích:

Cú pháp để sử dụng cả hai mô -đun như sau.

import random
import string

print(random.choices(string.ascii_lowercase))

Mã này tạo ra trả về một ký tự một cách ngẫu nhiên. Bạn có thể thay đổi phương thức hằng số chuỗi dựa trên các ký tự bạn muốn.

Bây giờ chúng ta hãy viết mã để tạo một chuỗi độ dài 5.

import random
import string

print(''.join(random.choices(string.ascii_lowercase, k=5)))

Đối với điều này, chúng tôi vượt qua một đối số khác ‘K, biểu thị kích thước của chuỗi. Phương thức này trả về một danh sách các ký tự và do đó chúng tôi sử dụng phương thức tham gia để chuyển đổi nó thành một chuỗi.

Chuỗi trong các trường hợp khác nhau:

Trong phương thức trước, chúng tôi đã sử dụng String.ascii_LowerCase. Chúng ta hãy thử các chữ cái liên tục, chúng ta cũng có thể kết hợp hai loại hằng số khác nhau.

Chuỗi ngẫu nhiên ở chữ hoa:

import random
import string

print(''.join(random.choices(string.ascii_uppercase, k=5)))

Sử dụng String.ascii.letters:

import random
import string

print(''.join(random.choices(string.ascii_letters, k=5)))

Kết hợp các loại hằng số chuỗi khác nhau:

import random
import string

print(''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=5)))

Tôi đã cung cấp các đoạn đầu ra vì đầu ra của tôi sẽ thay đổi từ bạn. Ngoài ra, trong tất cả các phương pháp tôi đã sử dụng ngẫu nhiên.choices. Xin vui lòng thử nó bằng cách sử dụng ngẫu nhiên.

Chuỗi bảo mật bằng mã hóa:

Mặc dù chúng ta có thể sử dụng phương thức ngẫu nhiên để tạo chuỗi ngẫu nhiên trong Python, chuỗi được tạo không được bảo mật bằng mã hóa. Do đó, nó không được khuyến nghị trong khi tạo mật khẩu temp.

Phiên bản Python 3.6 trở lên có cách tốt hơn để tạo ra một chuỗi ngẫu nhiên an toàn bằng mã hóa. Phương pháp này sử dụng các phương thức Secrets & String. Bí mật rất giống với phương pháp ngẫu nhiên, bạn có thể đọc thêm về nó ở đây.

Mã và giải thích:

import secrets
import string

print(''.join(secrets.choice(string.ascii_uppercase + string.ascii_lowercase) for i in range(7)))

Cú pháp để sử dụng cả hai mô -đun như sau.

Mã này tạo ra trả về một ký tự một cách ngẫu nhiên. Bạn có thể thay đổi phương thức hằng số chuỗi dựa trên các ký tự bạn muốn.

Bây giờ chúng ta hãy viết mã để tạo một chuỗi độ dài 5.

import random
import string

print(''.join(random.choices(string.ascii_lowercase, k=5)))