From 980fe00a74a9ad013b945755415ace2e5429c3c2 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Wed, 27 Oct 2021 02:31:24 +0300 Subject: [RU] Remove notranslate (#2874) --- .../server-side/django/authentication/index.html | 66 +++++++++++----------- 1 file changed, 33 insertions(+), 33 deletions(-) (limited to 'files/ru/learn/server-side/django/authentication/index.html') diff --git a/files/ru/learn/server-side/django/authentication/index.html b/files/ru/learn/server-side/django/authentication/index.html index a4baafeae5..c8508e97b7 100644 --- a/files/ru/learn/server-side/django/authentication/index.html +++ b/files/ru/learn/server-side/django/authentication/index.html @@ -61,7 +61,7 @@ original_slug: Learn/Server-side/Django/Аутентификация

Соответствующие настройки сделаны в параметрах INSTALLED_APPS и MIDDLEWARE файла проекта (locallibrary/locallibrary/settings.py), как показано ниже:

-
INSTALLED_APPS = [
+
INSTALLED_APPS = [
     ...
     'django.contrib.auth',  # Фреймворк аутентификации и моделей по умолчанию.
     'django.contrib.contenttypes',  # Django контент-типовая система (даёт разрешения, связанные с моделями).
@@ -82,7 +82,7 @@ MIDDLEWARE = [
 

Примечание: вы можете создавать пользователей программно, как показано ниже. Например, вам мог бы подойти данный способ в том случае, если вы разрабатываете интерфейс, который позволяет пользователям создавать их собственные аккаунты (вы не должны предоставлять доступ пользователям к административной панели вашего сайта).

-
from django.contrib.auth.models import User
+
from django.contrib.auth.models import User
 
 # Создайте пользователя и сохраните его в базе данных
 user = User.objects.create_user('myusername', 'myemail@crazymail.com', 'mypassword')
@@ -144,7 +144,7 @@ user.save()
 
 

Добавьте следующее в нижней части проекта urls.py файл (locallibrary/locallibrary/urls.py) файл:

-
#Add Django site authentication urls (for login, logout, password management)
+
#Add Django site authentication urls (for login, logout, password management)
 urlpatterns += [
     path('accounts/', include('django.contrib.auth.urls')),
 ]
@@ -157,7 +157,7 @@ urlpatterns += [
 
-
accounts/ login/ [name='login']
+
accounts/ login/ [name='login']
 accounts/ logout/ [name='logout']
 accounts/ password_change/ [name='password_change']
 accounts/ password_change/done/ [name='password_change_done']
@@ -169,7 +169,7 @@ accounts/ reset/done/ [name='password_reset_complete']

Теперь попробуйте перейти к URL-адресу входа (http://127.0.0.1:8000/accounts/login/). Это приведёт к сбою снова, но с ошибкой, сообщающей вам, что нам не хватает требуемого шаблона (registration / login.html) в пути поиска шаблона. Вы увидите следующие строки, перечисленные в жёлтом разделе вверху:

-
Exception Type:    TemplateDoesNotExist
+
Exception Type:    TemplateDoesNotExist
 Exception Value:    registration/login.html

Следующий шаг - создать каталог регистрации в пути поиска, а затем добавить файл login.html.

@@ -191,7 +191,7 @@ Exception Value: registration/login.html

Чтобы сделать эти директории видимыми для загрузчика шаблонов   (т. е. помещать этот каталог в путь поиска шаблона) откройте настройки проекта (/locallibrary/locallibrary/settings.py), и обновите в секции TEMPLATES строку 'DIRS' как показано.

-
TEMPLATES = [
+
TEMPLATES = [
     {
         ...
         'DIRS': [os.path.join(BASE_DIR, 'templates')],
@@ -207,7 +207,7 @@ Exception Value:    registration/login.html

Создайте новый HTML файл, названный /locallibrary/templates/registration/login.html. дайте ему следующее содержание:

-
{% extends "base_generic.html" %}
+
{% extends "base_generic.html" %}
 
 {% block content %}
 
@@ -258,7 +258,7 @@ Exception Value:    registration/login.html

Откройте настройки проекта (/locallibrary/locallibrary/settings.py) и добавьте текст ниже. Теперь, когда вы входите в систему, вы по умолчанию должны перенаправляться на домашнюю страницу сайта.

-
# Redirect to home URL after login (Default redirects to /accounts/profile/)
+
# Redirect to home URL after login (Default redirects to /accounts/profile/)
 LOGIN_REDIRECT_URL = '/'
 
@@ -268,7 +268,7 @@ LOGIN_REDIRECT_URL = '/'
Создайте и откройте /locallibrary/templates/registration/logged_out.html. Скопируйте текст ниже:

-
{% extends "base_generic.html" %}
+
{% extends "base_generic.html" %}
 
 {% block content %}
 <p>Logged out!</p>
@@ -290,7 +290,7 @@ LOGIN_REDIRECT_URL = '/'
 
 

Это форма, используемая для получения адреса электронной почты пользователя (для отправки пароля для сброса пароля). Создайте /locallibrary/templates/registration/password_reset_form.html и дайте ему следующее содержание:

-
{% extends "base_generic.html" %}
+
{% extends "base_generic.html" %}
 {% block content %}
 
 <form action="" method="post">{% csrf_token %}
@@ -306,7 +306,7 @@ LOGIN_REDIRECT_URL = '/'
 
 

Эта форма отображается после того, как ваш адрес электронной почты будет собран. Создайте /locallibrary/templates/registration/password_reset_done.html, и дайте ему следующее содержание:

-
{% extends "base_generic.html" %}
+
{% extends "base_generic.html" %}
 {% block content %}
 <p>We've emailed you instructions for setting your password. If they haven't arrived in a few minutes, check your spam folder.</p>
 {% endblock %}
@@ -316,7 +316,7 @@ LOGIN_REDIRECT_URL = '/'
 
 

Этот шаблон предоставляет текст электронной почты HTML, содержащий ссылку на сброс, которую мы отправим пользователям. Создайте /locallibrary/templates/registration/password_reset_email.html и дайте ему следующее содержание:

-
Someone asked for password reset for email \{{ email }}. Follow the link below:
+
Someone asked for password reset for email \{{ email }}. Follow the link below:
 \{{ protocol}}://\{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
 
@@ -324,7 +324,7 @@ LOGIN_REDIRECT_URL = '/'

На этой странице вы вводите новый пароль после нажатия ссылки в электронном письме с возвратом пароля. Создайте /locallibrary/templates/registration/password_reset_confirm.html и дайте ему следующее содержание:

-
{% extends "base_generic.html" %}
+
{% extends "base_generic.html" %}
 
 {% block content %}
 
@@ -361,7 +361,7 @@ LOGIN_REDIRECT_URL = '/'
 
 

Это последний шаблон сброса пароля, который отображается, чтобы уведомить вас о завершении сброса пароля. Создайте /locallibrary/templates/registration/password_reset_complete.html и дайте ему следующее содержание:

-
{% extends "base_generic.html" %}
+
{% extends "base_generic.html" %}
 {% block content %}
 
 <h1>The password has been changed!</h1>
@@ -383,7 +383,7 @@ LOGIN_REDIRECT_URL = '/'
 

Примечание: Система сброса пароля требует, чтобы ваш сайт поддерживал электронную почту, что выходит за рамки этой статьи, поэтому эта часть ещё не будет работать. Чтобы разрешить тестирование, поместите следующую строку в конец файла settings.py. Это регистрирует любые письма, отправленные на консоль (чтобы вы могли скопировать ссылку на сброс пароля с консоли).

-
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
+
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
 

Для получения дополнительной информации см. Отправка email (Django docs).

@@ -401,7 +401,7 @@ LOGIN_REDIRECT_URL = '/'

Откройте базовый шаблон (/locallibrary/catalog/templates/base_generic.html) и скопируйте следующий текст в sidebar блок непосредственно перед тегом шаблона endblock.

-
  <ul class="sidebar-nav">
+
  <ul class="sidebar-nav">
 
     ...
 
@@ -425,7 +425,7 @@ LOGIN_REDIRECT_URL = '/'
 
 

Если вы используете функциональные представления, самым простым способом ограничить доступ к вашим функциям является применение login_required декоратор к вашей функции просмотра, как показано ниже. Если пользователь вошёл в систему, ваш код просмотра будет выполняться как обычно. Если пользователь не вошёл в систему, это перенаправит URL-адрес входа, определённый в настройках проекта. (settings.LOGIN_URL), передав текущий абсолютный путь в качестве next параметра URL. Если пользователю удастся войти в систему, они будут возвращены на эту страницу, но на этот раз аутентифицированы.

-
from django.contrib.auth.decorators import login_required
+
from django.contrib.auth.decorators import login_required
 
 @login_required
 def my_view(request):
@@ -437,14 +437,14 @@ def my_view(request):
 
 

Аналогичным образом, самый простой способ ограничить доступ к зарегистрированным пользователям в ваших представлениях на основе классов - это производные от LoginRequiredMixin. Вы должны объявить этот mixin сначала в списке суперкласса, перед классом основного представления.

-
from django.contrib.auth.mixins import LoginRequiredMixin
+
from django.contrib.auth.mixins import LoginRequiredMixin
 
 class MyView(LoginRequiredMixin, View):
     ...

Это имеет такое же поведение при переадресации, что и  login_required декоратор. Вы также можете указать альтернативное местоположение для перенаправления пользователя, если он не аутентифицирован (login_url), и имя параметра URL вместо "next" , чтобы вставить текущий абсолютный путь (redirect_field_name).

-
class MyView(LoginRequiredMixin, View):
+
class MyView(LoginRequiredMixin, View):
     login_url = '/login/'
     redirect_field_name = 'redirect_to'
 
@@ -463,21 +463,21 @@ class MyView(LoginRequiredMixin, View):

Откройте catalog/models.py, и импортируйте модель User из django.contrib.auth.models (добавьте это чуть ниже предыдущей строки импорта в верхней части файла, так User доступен для последующего кода, что позволяет использовать его):

-
from django.contrib.auth.models import User
+
from django.contrib.auth.models import User
 

Затем добавьте поле borrower в модель BookInstance:

-
borrower = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
+
borrower = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
 

Пока мы здесь, давайте добавим свойство, которое мы можем вызвать из наших шаблонов, чтобы указать, просрочен ли конкретный экземпляр книги. Хотя мы могли бы рассчитать это в самом шаблоне, использование свойства, как показано ниже, будет намного более эффективным. Добавьте это где-нибудь в верхней части файла:

-
from datetime import date
+
from datetime import date

Теперь добавьте следующее определение свойства внутри класса BookInstance:

-
@property
+
@property
 def is_overdue(self):
     if self.due_back and date.today() > self.due_back:
         return True
@@ -489,7 +489,7 @@ def is_overdue(self):
 
 

Теперь, когда мы обновили наши модели, нам нужно будет внести новые изменения в проект, а затем применить эти миграции:

-
python3 manage.py makemigrations
+
python3 manage.py makemigrations
 python3 manage.py migrate
 
@@ -497,7 +497,7 @@ python3 manage.py migrate

Теперь откройте каталог catalog/admin.py, и добавьте поле borrower в класс BookInstanceAdmin , как в list_display , так и в полях fieldsets , как показано ниже. Это сделает поле видимым в разделе Admin, так что мы можем при необходимости назначить User в BookInstance.

-
@admin.register(BookInstance)
+
@admin.register(BookInstance)
 class BookInstanceAdmin(admin.ModelAdmin):
     list_display = ('book', 'status', 'borrower', 'due_back', 'id')
     list_filter = ('status', 'due_back')
@@ -525,7 +525,7 @@ class BookInstanceAdmin(admin.ModelAdmin):
 
 

Добавьте следующее в catalog/views.py:

-
from django.contrib.auth.mixins import LoginRequiredMixin
+
from django.contrib.auth.mixins import LoginRequiredMixin
 
 class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):
     """
@@ -544,7 +544,7 @@ class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):
 
 

Теперь откройте /catalog/urls.py и добавьте url() , указывая на приведённое выше представление (вы можете просто скопировать текст ниже в конец файла).

-
urlpatterns += [
+
urlpatterns += [
     url(r'^mybooks/$', views.LoanedBooksByUserListView.as_view(), name='my-borrowed'),
 ]
@@ -552,7 +552,7 @@ class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):

Теперь все, что нам нужно сделать для этой страницы, - это добавить шаблон. Сначала создайте файл шаблона /catalog/templates/catalog/bookinstance_list_borrowed_user.html и дайте ему следующее содержание:

-
{% extends "base_generic.html" %}
+
{% extends "base_generic.html" %}
 
 {% block content %}
     <h1>Borrowed books</h1>
@@ -582,7 +582,7 @@ class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):
 
 

Откройте базовый шаблон (/locallibrary/catalog/templates/base_generic.html) и добавьте выделенную строку из sidebar, как показано на рисунке.

-
 <ul class="sidebar-nav">
+
 <ul class="sidebar-nav">
    {% if user.is_authenticated %}
    <li>User: \{{ user.get_username }}</li>
    <li><a href="{% url 'my-borrowed' %}">My Borrowed</a></li>
@@ -607,7 +607,7 @@ class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):
 
 

Определение разрешений выполняется в разделе моделей "class Meta" , используется permissions поле. Вы можете указать столько разрешений, сколько необходимо в кортеже, причём каждое разрешение определяется во вложенном кортеже, содержащем имя разрешения и отображаемое значение разрешения. Например, мы можем определить разрешение, позволяющее пользователю отметить, что книга была возвращена, как показано здесь:

-
class BookInstance(models.Model):
+
class BookInstance(models.Model):
     ...
     class Meta:
         ...
@@ -621,7 +621,7 @@ class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):
 
 

Разрешения текущего пользователя хранятся в переменной шаблона, называемой  \{{ perms }}. Вы можете проверить, имеет ли текущий пользователь определённое разрешение, используя конкретное имя переменной в соответствующем приложении «Django» - например, \{{ perms.catalog.can_mark_returned }} будет True если у пользователя есть это разрешение, а False - в противном случае. Обычно мы проверяем разрешение с использованием шаблона {% if %}, как показано в:

-
{% if perms.catalog.can_mark_returned %}
+
{% if perms.catalog.can_mark_returned %}
     <!-- We can mark a BookInstance as returned. -->
     <!-- Perhaps add code to link to a "book return" view here. -->
 {% endif %}
@@ -633,7 +633,7 @@ class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):
 
 

Функция в представлении с декоратором:

-
from django.contrib.auth.decorators import permission_required
+
from django.contrib.auth.decorators import permission_required
 
 @permission_required('catalog.can_mark_returned')
 @permission_required('catalog.can_edit')
@@ -642,7 +642,7 @@ def my_view(request):
 
 

Требуется разрешение mixin для представлений на основе классов.

-
from django.contrib.auth.mixins import PermissionRequiredMixin
+
from django.contrib.auth.mixins import PermissionRequiredMixin
 
 class MyView(PermissionRequiredMixin, View):
     permission_required = 'catalog.can_mark_returned'
-- 
cgit v1.2.3-54-g00ecf