Python PasswordGenerator как я могу его закодировать

Я пытаюсь сделать генератор паролей, в котором можно выбрать длину и то, какие цифры, символы или специальные символы должны быть внутри. Я затрудняюсь с кодом, потому что не знаю, как я могу позволить программе выбирать 1 символ из каждого списка для каждого цикла длины

Это мой код сейчас

        alphabets = list(string.ascii_letters)
        digits = list(string.digits)
        special_characters = list("!@#$%^&*()")

        a_d = list(alphabets, digits)
        a_s = list(alphabets, special_characters)
        d_s = list(digits, special_characters)
        characters = list(string.ascii_letters + string.digits + "!@#$%^&*()")
        random.shuffle(characters)
        length = int(request.GET.get('length'))
        alphabets_b = bool(request.GET.get('alphabets'))
        digits_b = bool(request.GET.get('digits'))
        special_characters_b = bool(request.GET.get('special_characters'))
        
        password = []
        for i in range(length):
            if alphabets_b == True:
                if digits_b == True:
                    password.append(random.choice(a_d))
                elif special_characters_b == True:
                    password.append(random.choice(a_s))
            elif digits_b == True:
                if special_characters_b == True:
                    password.append(random.choice(d_s))
            elif special_characters_b == True:
                if digits_b == True:
                    password.append(random.choice(d_s))

Я знаю, что это очень плохое кодирование, как я могу улучшить код, чтобы он работал. С этим кодом программа говорит, что я не могу поместить 3 других списка в 1 список, что имеет смысл, но я не могу придумать лучший способ разделения символов.

В моем шаблоне есть такой код:

                        <form method="get" action="{% url 'home:passwordgenerator' %}">
                            <div class="fake_input">

                            <p class="fake_input_text">{{ password }}</p>
                            </div>
                                    <span class="fake_input_l">Length:</span> <select class="fake_input_drop" name="length"> 
                                        <option value="8">8</option>
                                        <option value="10">10</option>
                                        <option value="12">12</option>
                                        <option value="14">14</option>
                                        <option value="16">16</option>
                                        <option value="18">18</option>
                                        <option value="20">20</option>
                                    </select>
                                    <span class="fake_input_l"> Alphabet Letters: <input type="checkbox" name="alphabets" checked>
                                    Digits: <input type="checkbox" name="digits" checked>
                                    Special Characters: <input type="checkbox" name="special_characters" checked></span>
                                    <button type="submit" value="Generate Password" class="fake_input_button">Generate</button>     
                        </form>

Как вы видите, я пытаюсь сделать это с помощью флажков. Спасибо за помощь!

Вернуться на верх