М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет328/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   324   325   326   327   328   329   330   331   ...   334
Байланысты:
Изучаем Python


Глава 19 • Учетные записи пользователей
Чтобы увидеть, как работает этот способ, выполните вход в качестве пользователя, 
с которым связаны все существующие темы, и перейдите к странице со списком 
тем. На ней должны отображаться все темы. Теперь завершите сеанс и войдите 
снова с другой учетной записью. На этот раз страница должна быть пустой.
Защита тем пользователя
Никаких реальных ограничений на доступ к страницам еще не существует, по-
этому любой зарегистрированный пользователь может опробовать разные URL 
(например, 
http://localhost:8000/topics/1/
) и просмотреть страницы тем, которые ему 
удастся подобрать.
Попробуйте сделать это. После входа с учетной записью суперпользователя ско-
пируйте URL или запишите идентификатор в URL темы, после чего завершите 
сеанс и войдите снова от имени другого пользователя. Введите URL этой темы. 
Вам удастся прочитать все записи, хотя сейчас вы вошли под именем другого 
пользователя.
Чтобы решить эту проблему, мы будем выполнять проверку перед получением 
запрошенных данных в функции представления 
topic()
:
views.py
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required

from django.http import Http404
...
@login_required
def topic(request, topic_id):
"""Выводит одну тему и все ее записи."""
topic = Topic.objects.get(id=topic_id)
# Проверка того, что тема принадлежит текущему пользователю.

if topic.owner != request.user:
raise Http404
entries = topic.entry_set.order_by('-date_added')
context = {'topic': topic, 'entries': entries}
return render(request, 'learning_logs/topic.html', context)
...
Код 404 — стандартное сообщение об ошибке, которое возвращается в тех слу-
чаях, когда запрошенный ресурс не существует на сервере. В данном случае мы 
импортируем исключение 
Http404

, которое будет выдаваться программой при 
запросе пользователем темы, которую ему видеть не положено. Получив запрос 
темы, перед отображением страницы мы убеждаемся в том, что пользователь этой 
темы является текущим пользователем приложения. Если тема не принадлежит 
текущему пользователю, выдается исключение 
Http404

, а Django возвращает 
страницу с ошибкой 404.


Редактирование данных
451
Пока при попытке просмотреть записи другого пользователя вы получите от Django 
сообщение «Страница не найдена». В главе 20 проект будет настроен так, чтобы 
пользователь видел полноценную страницу ошибки.
Защита страницы edit_entry
Страницы 
edit_entry
используют URL-адреса в форме 
http://localhost:8000/edit_
entry/entry_id/
, где 
entry_id
— число. Защитим эту страницу, чтобы никто не мог 
подобрать URL для получения доступа к чужим записям:


Достарыңызбен бөлісу:
1   ...   324   325   326   327   328   329   330   331   ...   334




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

    Басты бет