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 3.0

Команда Django рада объявить о выпуске Django 3.0: движение к тому, чтобы сделать Django полностью асинхронным, предоставляя поддержку для работы в качестве приложения ASGI, теперь официально поддерживает MariaDB 10.1 и выше, а также много других новых функций и возможностей.

Выпущены релизы безопасности Django: 2.2.8 и 2.1.15

В соответствии с политикой безопасности, команда Django выпускает Django 2.2.8 и Django 2.1.15. Этот выпуск решает проблему безопасности, подробно описанную ниже. Мы призываем всех пользователей Django обновиться как можно скорее.

Путь от request до response в Джанго

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

Выпущен релиз-кандидат Django 3.0

Кандидат 1 релиза Django 3.0 - это последняя возможность для вас испытать множество новых функций перед выпуском Django 3.0.

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.