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.

Django DetailView - основы использования

Django позволяет создавать приложения очень легко. Если приложение должно быть выпущено быстро и является относительно общим, то эта среда Python идеально подходит для этого. В течение нескольких лет я профессионально работал в этой среде и часто рылся внутри, поэтому знаю почти всё, и сегодня я представлю вам все, что нужно знать, чтобы эффективно использовать универсальный DetailView в Django.

Выпущены исправления Django: 2.2.7, 2.1.14 и 1.11.26

Сегодня команда разработчиков Django выпустила версии 2.2.7, 2.1.14 и 1.11.26 с исправлениями ошибок. Пакет и контрольные суммы доступны на странице загрузок, а также из индекса пакетов Python. Идентификатор ключа PGP, использованный в этом выпуске: Mariusz Felisiak: 2EF56372BA48CD1B.

Как заставить request.is_ajax() работать с JS fetch()

Объект запроса Django request имеет изящный небольшой метод is_ajax(). Он позволяет определить, поступил ли запрос от JS-фреймворка (он же ajax старой школы). Хотя он отлично работает с некоторыми библиотеками JS, включая почтенный jQuery, он не будет работать с современным встроенным в JS fetch().

Практика программирования на Python 3, лекция №5

Лекции о Python 3 от Тимофея Хирьянова при поддержке Московского физико-технического института. Лекция №5.

Практика программирования на Python 3, лекция №4

Лекции о Python 3 от Тимофея Хирьянова при поддержке Московского физико-технического института. Лекция №4.

Практика программирования на Python 3, лекция №3

Лекции о Python 3 от Тимофея Хирьянова при поддержке Московского физико-технического института. Лекция №3.

Практика программирования на Python 3, лекция №2

Лекции о Python 3 от Тимофея Хирьянова при поддержке Московского физико-технического института. Лекция №2.

Практика программирования на Python 3, лекция №1

Лекции о Python 3 от Тимофея Хирьянова при поддержке Московского физико-технического института. Лекция №1.

Как загрузить файлы с Django

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

Советы по написанию миграции данных в приложении Django

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