Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
96 / 64 / 34
Регистрация: 08.02.2021
Сообщений: 213

Валидация пароля в Django

02.04.2022, 10:46. Показов 2506. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Делаю систему регистрации на сайте. Обратил внимание, что, если ввести в качестве пароля все “звёздочки” (******) или, к примеру, знаки “равно” (===), или символы кириллицы, то, при нужной длине пароля, он проходит валидацию.
Не уверен, что так должно быть… Возможно, это из-за того, что я у себя в форме определил:
Python
1
password1 = forms.CharField(label='Пароль', widget=forms.PasswordInput(attrs={'class': 'reg-form-input'}))
Я так понимаю, я могу сделать свой собственный валидатор на основе RegexValidator, где укажу нужные символы и знаки, которые должен содержать пароль. Но не повлияет ли это на безопасность пользователей? Может для пароля там какие-то дефолтные штуки прикручены, что лучше в это не лезть?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2022, 10:46
Ответы с готовыми решениями:

Как сделать сброс пароля в django?
Доброго времени суток, в django новичок, появилась необходимость сделать страничку с возможностью восстановления пароля по почте силами...

Восстановление пароля в Django по email без использования template
В Django приложении необходимо сделать восстановление пароля по email, но, т.к. приложение работает как api, страницы в нём не...

Почему django не отправляет письмо с восстановлением пароля на почту?
Доброго времени суток, делаю сброс пароля и возникла проблема: При значении параметра ENAIL_BACKEND...

7
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
02.04.2022, 18:29
Добавь что то подобное:

Python
1
2
    def clean(self):
        cleaned_data = super(LoginForm, self).clean()
Хотя... У тебя модель юзера из коробки или переопределенная?
0
96 / 64 / 34
Регистрация: 08.02.2021
Сообщений: 213
02.04.2022, 22:03  [ТС]
Lekks, вот, мой алгоритм регистрации юзера:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
forms.py
 
class RegistrationUserForm(UserCreationForm):
    """ Форма регистрации нового пользователя """
 
    # Валидатор для username
    username_validator = RegexValidator(
        regex=r'^[0-9a-zA-Z._-]*$',
        message='Не более 30 символов. Только латинские буквы, цифры и символы ./-/_',
    )
 
    username = forms.CharField(
        label='Логин',
        max_length=30,
        validators=[username_validator],
        widget=forms.TextInput(attrs={'class': 'reg-form-input'}))
    first_name = forms.CharField(label='Имя', widget=forms.TextInput(attrs={'class': 'reg-form-input'}))
    last_name = forms.CharField(label='Фамилия', widget=forms.TextInput(attrs={'class': 'reg-form-input'}))
    email = forms.EmailField(label='Эл. адрес', widget=forms.EmailInput(attrs={'class': 'reg-form-input'}))
    password1 = forms.CharField(label='Пароль', widget=forms.PasswordInput(attrs={'class': 'reg-form-input'}))
    password2 = forms.CharField(label='Повторите пароль', widget=forms.PasswordInput(attrs={'class': 'reg-form-input'}))
 
    class Meta:
        model = User
        fields = (
            'username', 'first_name', 'last_name', 'email',
            'password1', 'password2'
        )
 
views.py
 
class RegistrationUserView(CreateView):
    """
    Возвращает форму регистрации пользователя и, в случае успешной регистрации,
    перенаправляет пользователя на главную страницу сайта
    """
 
    form_class = RegistrationUserForm
    template_name = 'users_app/register.html'
    success_url = reverse_lazy('users_app:homepage')
 
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = 'Регистрация'
        return context
 
    def form_valid(self, form):
        user = form.save()
        SimpleUser.objects.create(
            owner=user,
            username=user.username,
            name=user.first_name.capitalize(),
            surname=user.last_name.capitalize(),
            email=user.email,
            slug=user.username,
        )
        login(self.request, user)
        # редирект на страницу добавления аватарки
        return redirect('users_app:avatar')
И можно уточнить, что именно делает ваш код?
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
03.04.2022, 08:30
Вопрос - для чего переопределены поля паролей в форме? Не вижу, чтобы как то они использовались.

Метод clean отвечает за проверку и валидацию формы, в том числе полей паролей.
0
96 / 64 / 34
Регистрация: 08.02.2021
Сообщений: 213
03.04.2022, 09:30  [ТС]
Lekks, я переопределил поля паролей, чтобы им атрибут добавить, как у остальных полей. Затем в шаблоне их использую.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{% extends 'users_app/base.html' %}
 
{% block content %}
<main class="main-container">
    <section class="title">
        <h1 class=title-text">Регистрация</h1>
    </section>
    <section class="fields">
        <form method="post" action="{% url 'users_app:register' %}" class="reg-form">
            {% csrf_token %}
            <ul class="rows">
                {% for f in form %}
                <li class="row">
                    <label for="{{ f.id_for_label }}" class="reg-form-label">{{ f.label }}*</label>
                    {{ f }}
                </li>
                <div class="errors-msg">{{ f.errors }}</div>
                {% endfor %}
            </ul>
             <div class="btn-container">
                <button type="submit" class="reg-btn">Регистрация</button>
                <a href="{% url 'users_app:login' %}"><p class="reg-btn3">Вход</p></a>
            </div>
        </form>
    </section>
</main>
{% endblock content %}
Возможно, из-за этого поля паролей стали себя так странно вести? Или они по умолчанию принимают в себя кириллицу и прочие символы?
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
03.04.2022, 09:41
Цитата Сообщение от DmBnd Посмотреть сообщение
Возможно, из-за этого поля паролей стали себя так странно вести?
Ты их переопределил, но не валидируешь, вот они и берут все что напихаешь. Вообще странные конечно решения у тебя. Почитай в гугле - материалов полно. Но в твоем случае необязательно через форму класс навешивать на поля. Можно и через css.
1
96 / 64 / 34
Регистрация: 08.02.2021
Сообщений: 213
03.04.2022, 12:27  [ТС]
Lekks, и изменил свою форму на такую
Python
1
2
3
4
5
6
7
8
9
10
11
forms.py
 
   class RegistrationUserForm(UserCreationForm):
    """ Форма регистрации нового пользователя """
 
       class Meta:
           model = User
           fields = (
               'username', 'first_name', 'last_name', 'email',
               'password1', 'password2'
           )
, чтобы определить стили в CSS, как вы посоветовали. И, при попытке регистрации с кириллицей и прочими символами, django пропустил мой пароль. Так что, в любом случае, надо прописывать собственные валидаторы, а это значит, что надо переопределять поля в любом случае. Так ведь?
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
05.04.2022, 09:44
Лучший ответ Сообщение было отмечено DmBnd как решение

Решение

DmBnd, проверил у себя, да, при такой схеме надо валидировать пароли отдельно (да и не только пароли). Что то типа:

Python
1
2
3
4
5
6
from django.contrib.auth.password_validation import validate_password
 
def clean_password(self):
        password = self.cleaned_data['password']
        validate_password(password)
        return password
Это в форме.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2022, 09:44
Помогаю со студенческими работами здесь

Django 2.0 восстановление пароля через django-allauth
Здравствуйте, у меня возник вопрос, в django-allauth есть функция восстановления пароля по эл. почте, но вот, указав почту, сообщение не...

Валидация пароля
Здравствуйте! Подскажите как реализовать обработку валидации введенного повторно пароля, для проверки, совпадают ли пароли на стороне...

Валидация пароля
You would like to set a password for an email account. However, there are two restrictions on the format of the password. It has to contain...

Валидация пароля
Сделал пользовательский элемент управления. В нем надо сделать валидацию пароля в textbox: - наличия текста - наличия в пароле не...

Валидация пароля jQuery
Добрый день. Нужно сделать валидацию формы с паролем. Но почему-то даже простейшая проверка на &gt;6 символов не удаётся. Это моя первая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru