Книга «Изучаем Python»



Pdf көрінісі
бет258/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   254   255   256   257   258   259   260   261   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )

ПРИМЕЧАНИЕ
Такая система регистрации позволяет любому пользователю создать сколько угодно учетных за-
писей Learning Log . Однако некоторые системы требуют, чтобы пользователь подтвердил свою 
заявку, отправляя сообщение электронной почты, на которое пользователь должен ответить . 
При таком подходе в системе будет создано меньше спамерских учетных записей, чем в простей-
шей системе из нашего примера . Но пока вы только учитесь строить приложения, вполне нормаль-
но тренироваться на упрощенной системе регистрации вроде используемой нами .
УПРАЖНЕНИЯ
19-2 . Учетные записи в блоге: добавьте систему аутентификации и регистрации в проект 
Blog, работа над которым началась в упражнении 19-1 (с . 419) . Проследите за тем, чтобы 
пользователь, выполнивший вход, видел свое имя где-то на экране, а незарегистрирован-
ные пользователи видели ссылку на страницу регистрации .


428
Глава 19 • Учетные записи пользователей
Редактирование данных
Пользователь должен иметь возможность вводить данные, принадлежащие только 
ему лично. Мы создадим систему, которая будет определять, какому пользователю 
принадлежат те или иные данные, и ограничивать доступ к страницам, чтобы поль-
зователь мог работать только с принадлежащими ему данными.
В этом разделе мы изменим модель 
Topic
, чтобы каждая тема принадлежала кон-
кретному пользователю. При этом также автоматически решается проблема с запи-
сями, так как каждая запись принадлежит конкретной теме. Начнем с ограничения 
доступа к страницам.
Ограничение доступа с использованием @login_required
Django позволяет легко ограничить доступ к определенным страницам для поль-
зователей, выполнивших вход, с помощью декоратора 
@login_required

Декоратор
(decorator) представляет собой директиву, размещенную непосредственно перед 
определением функции, применяемую к функции перед ее выполнением и влия-
ющую на поведение кода. Рассмотрим пример.
Ограничение доступа к страницам тем
Каждая тема будет принадлежать пользователю, поэтому только зарегистриро-
ванные пользователи смогут запрашивать страницы тем. Добавьте следующий код 
в 
learning_logs/views .py
:
views.py
...
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
from .models import Topic, Entry
...
@login_required
def topics(request):
"""Выводит все темы."""
...
Сначала импортируется функция 
login_required()
. Мы применяем 
login_
required()
как декоратор для функции представления 
topics()
, для чего перед 
именем 
login_required()
ставится знак 
@
; он сообщает Python, что этот код должен 
выполняться перед кодом 
topics()
.
Код 
login_required()
проверяет, выполнил ли пользователь вход, и Django вы-
полняет код 
topics()
только при выполнении этого условия. Если же пользователь 
не выполнил вход, он перенаправляется на страницу входа.
Чтобы перенаправление работало, необходимо внести изменения 
settings .py
и со-
общить Django, где искать страницу входа. Добавьте следующий фрагмент в самый 
конец 
settings .py
:


Редактирование данных
429
settings.py
"""
Django settings for learning_log project
...
# Мои настройки
LOGIN_URL = '/users/login/'
Когда пользователь, не прошедший проверку, запрашивает страницу, защищенную 
декоратором 
@login_required
, Django отправляет пользователя на URL-адрес, 
определяемый 
LOGIN_URL
в 
settings .py
.
Чтобы протестировать эту возможность, завершите сеанс в любой из своих учетных 
записей и вернитесь на домашнюю страницу. Щелкните на ссылке 
Topics
, которая 
должна направить вас на страницу входа. Выполните вход с любой из своих учет-
ных записей, на домашней странице снова щелкните на ссылке 
Topics
. На этот раз 
вы получите доступ к странице со списком тем.
Ограничение доступа в Learning Log
Django упрощает ограничение доступа к страницам, но вы должны решить, какие 
страницы следует защищать. Лучше сначала подумать, к каким страницам можно 
разрешить неограниченный доступ, а затем ограничить его для всех остальных 
страниц. Снять излишние ограничения несложно, причем это куда менее риско-
ванно, чем оставлять действительно важные страницы без ограничения доступа.
В приложении Learning Log мы оставим неограниченный доступ к домашней 
странице, странице регистрации и выхода. Доступ ко всем остальным страницам 
будет ограничен.
Вот как выглядит файл 
learning_logs/views .py
с декораторами 
@login_required
, при-
мененными к каждому представлению, кроме 
index()
:
views.py
...
@login_required
def topics(request):
...
@login_required
def topic(request, topic_id):
...
@login_required
def new_topic(request):
...
@login_required
def new_entry(request, topic_id):
...
@login_required
def edit_entry(request, entry_id):
...


430

Достарыңызбен бөлісу:
1   ...   254   255   256   257   258   259   260   261   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет