Everything you wanted to know
about the Django framework

Как использовать встроенное в Django управление паролями

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

Что необходимо

1. Обновление ссылки проекта в urls.py

# yourproject.urls.py
from django.conf.urls import url, include


urlpatterns = [
        ...
        url(r'^accounts/', include('accounts.password.urls')),
        ...
]

2. Создание модуля управления учетной записью

$ cd /path/to/your/project/root # where manage.py is
$ python manage.py startapp accounts  # assuming we want to store our passwords module here.
$ mkdir accounts/passwords
$ touch accounts/passwords/__init__.py
$ touch accounts/passwords/urls.py

3. Создание urls.py в модуле управления учетной записью

# accounts.passwords.urls.py 
from django.conf.urls import url
from django.contrib.auth import views as auth_views

urlpatterns  = [
url(r'^password/change/$', auth_views.PasswordChangeView.as_view(), name='password_change'),
url(r'^password/change/done/$', auth_views.PasswordChangeDoneView.as_view(), name='password_change_done'),
url(r'^password/reset/$', auth_views.PasswordResetView.as_view(), name='password_reset'),
url(r'^password/reset/done/$', auth_views.PasswordResetDoneView.as_view(),  name='password_reset_done'),
url(r'^password/reset/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 
    auth_views.PasswordResetConfirmView.as_view(),
    name='password_reset_confirm'),

url(r'^password/reset/complete/$',
    auth_views.PasswordResetCompleteView.as_view(),
    name='password_reset_complete'),
]

4. Добавление шаблонов

Шаблоны нужно добавить в <каталог-шаблонов>/registration/.

password_change_done.html

{% extends "base.html" %}
{% block content %}
<div class='row'>
    <div class="col-12 text-center py-5">
            <h1 class='my-5 py-5'>Password successfully changed!</h1>
      </div>
</div>
{% endblock %}

 

password_change_form.html

{% extends "base.html" %}
{% block content %}
<div class='row'>
    <div class='col-md-4 col-10  mx-auto'>
    <h1>Change your Password</h1>
        <form method='post' action=''>{% csrf_token %}
           {{ form.as_p }}
        <span style='margin-bottom: 12px;'></span>
        <button type="submit" class='btn btn-block btn-info'>Save</button>
        </form>
      </div>
</div>
{% endblock %}

 

password_reset_complete.html

{% extends "base.html" %}
{% block content %}
<div class='row'>
    <div class="col-12 text-center py-5">
            <h1 class='my-5 py-5'>Password reset complete</h1>
            <a href='/login'>Login</a>
      </div>
</div>
{% endblock %}

 

password_reset_confirm.html

{% extends "base.html" %}
{% block content %}
<div class='row'>
    <div class='col-md-4 col-10  mx-auto'>
        <h1>Set your Password</h1>
        <form method='post' action=''>{% csrf_token %}
        {{ form.as_p }}
        <span style='margin-bottom: 12px;'></span>
        <button type="submit" class='btn btn-block btn-info'>Set new password</button>
        </form>
      </div>
</div>
{% endblock %}

 

password_reset_done.html

{% extends "base.html" %}
{% block content %}
<div class='row'>
    <div class="col-12 text-center py-5">
            <h1 class='my-5 py-5'>Rest Instructions Sent</h1>
            <p>Please check your email</p>
      </div>
</div>
{% endblock %}

 

password_reset_email.html

{% load i18n %}
{% blocktrans %}
Hello, 

Reset your password on {{ domain }} for {{ user }}:
{% endblocktrans %}

{% block reset_link %}
{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}

{% endblock %}

 

password_reset_email.txt

{% load i18n %}
{% blocktrans %}
Hello, 

Reset your password on {{ domain }} for {{ user }}:
{% endblocktrans %}

{% block reset_link %}
{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}

{% endblock %}

 

password_reset_form.html

{% extends "base.html" %}
{% block content %}
<div class='row'>
    <div class='col-md-4 col-10  mx-auto'>
    <h1>Reset your Password</h1>
        <form method='post' action=''>{% csrf_token %}
        {{ form.as_p }}
        <span style='margin-bottom: 12px;'></span>
        <button type="submit" class='btn btn-block btn-info'>Reset Password</button>
        </form>
      </div>
</div>
{% endblock %}

5. Все готово!

Поделитесь с другими:

Представления-классы
(Class-Based Views)

Детальное описание и структура классов Django.

Пользовательская модель User

Каждый новый проект Django должен использовать пользовательскую модель User. Официальная документация Django гласит, что это «настоятельно рекомендуется», но я сделаю еще один шаг и без колебаний скажу: вы просто с ума сошли, если не использовали пользовательскую модель раньше.

Исправление ошибок, Django 2.1.8

Выпущена новая версия Django 2.1.8, в которой исправлена ошибка в админке, допущенная в версии 2.1.7: запрещено редактировать inline-элементы для ManyToManyField, если у пользователя есть только разрешение на просмотр.

Аутентификация в Django: полный пример входа, выхода и смены пароля

В этом руководстве вы узнаете, как легко добавить полноценную систему аутентификации приложение Django с функциями входа в систему, выхода из системы, смены пароля и сброса.

Django 2.2 предварительный выпуск 1

Выпущен релиз-кандидат 1 версии Django 2.2, в котором вы можете предварительно протестировать некоторые новые возможности перед выпуском Django 2.2.

Поиск узких мест производительности проекта на Django

При оптимизации производительности веб-приложения распространенная ошибка — начинать с оптимизации самой медленной страницы (или API). Помимо учета времени отклика, мы также должны учитывать трафик, который он получает, чтобы определить порядок оптимизации. В этой статье мы расскажем о веб-приложении Django, найдем узкие места с высокой эффективностью, а затем приступим к их оптимизации для повышения производительности.

Просмотр SQL запросов Django

Django ORM позволяет легко взаимодействовать с базой данных. Чтобы понять, что происходит за кулисами или увидеть производительность SQL, мы можем записать все запросы SQL, которые выполняются. В этой статье мы увидим различные способы достижения этого.

Как подключить виджет выбора даты в Django

Из этого руководства вы узнаете как легко подключить виджет выбора даты в своем проекте Django. Мы узнаем, как установить его вручную, потом как настроить пользовательский виджет и, наконец, как использовать стороннее приложение Django с поддержкой средств выбора даты и времени.

Исправление ошибок, Django 2.0.13

Сегодня был осуществлен новый выпуск исправлений Django 2.0.13. Исправлен сбой в django.utils.numberformat.format_number(), когда число имеет более 200 цифр (#30177).

Новый формат middleware в Django 2

MIddleware (промежуточный слой) используются для модификации объекта приходящего запроса в представление (view) или для модификации объекта ответа, возвращаемого из представления. Они позволяют нам изменять запросы/ответы глобально.

Массовое обновление записей в Django используя аннотации и подзапросы

Как массово обновлять записи в Django с помощью аннотаций и подзапросов.