HTML Чекбоксы снимают отметку после кнопки отправки
Я написал менеджер паролей с длиной и флажками для символов типа chars/digits и специальных символов типа !$&
Каждый раз, когда я нажимаю кнопку submit для генерации пароля, не отмеченные флажки снова отмечаются (потому что по умолчанию они должны быть отмечены), но как я могу сделать так, чтобы флажок был таким, каким он был до отправки формы. Я пробовал сделать это с помощью if-статьи в шаблоне, потому что я использую django, но это не помогает. Если у кого-то есть идея, как я могу достичь своего решения, пожалуйста, дайте мне знать. Спасибо за помощь
Вот мой код:
def view_passwordgenerator(request):
alphabets_b = bool(request.GET.get('alphabets'))
digits_b = bool(request.GET.get('digits'))
special_characters_b = bool(request.GET.get('special_characters'))
alphabets = string.ascii_letters*alphabets_b
digits = string.digits*digits_b
special_characters = "!@#$%^&*()"*special_characters_b
characters = alphabets + digits + special_characters
if 'length' in request.GET:
length = int(request.GET.get('length'))
password = ''
for i in range(length):
password+=random.choice(characters)
pyperclip.copy(password)
pyperclip.paste()
messages.info(request, 'The password was copied to your clipboard')
username = request.user.username
context = {'password': password, 'length': length, 'username': username}
return render(request, 'home/passwordgenerator.html', context)
username = request.user.username
hs = {'username': username}
return render(request, 'home/passwordgenerator.html', hs)
и мой шаблон:
<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" {% if length == 8 %}selected{% endif %}>8</option>
<option value="10" {% if length == 10 %}selected{% endif %}>10</option>
<option value="12" {% if length == 12 %}selected{% endif %}>12</option>
<option value="14" {% if length == 14 %}selected{% endif %}>14</option>
<option value="16" {% if length == 16 %}selected{% endif %}>16</option>
<option value="18" {% if length == 18 %}selected{% endif %}>18</option>
<option value="20" {% if length == 20 %}selected{% endif %} >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>
Вы должны установить значения этих флажков в контексте и при возвращении на страницу проверять эти значения и на основе флага отмечать их как установленные или снятые, как показано ниже :-
def view_passwordgenerator(request):
username = request.user.username
alphabets_b = bool(request.GET.get('alphabets'))
digits_b = bool(request.GET.get('digits'))
special_characters_b = bool(request.GET.get('special_characters'))
...
context = {'username': username}
if 'length' in request.GET:
...
...
context.update({'password': password, 'length': length, 'alphabets_b': alphabets_b, 'digits_b': digits_b, 'special_characters_b': special_characters_b})
else:
context.update({'alphabets_b': True, 'digits_b': True, 'special_characters_b': True})
return render(request, 'home/passwordgenerator.html', context)
На вашей HTML странице вы должны проверить флаги, как показано ниже :-
<span class="fake_input_l">
Alphabet Letters: <input type="checkbox" name="alphabets" {% if alphabets_b %}checked {% endif %} >
Digits: <input type="checkbox" name="digits" {% if digits_b %}checked {% endif %}>
Special Characters: <input type="checkbox" name="special_characters" {% if special_characters_b %}checked {% endif %}>
</span>