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



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

python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, learning_logs, sessions
Running migrations:

Applying learning_logs.0003_topic_owner... 
OK
(ll_env)learning_log$
Django применяет новую миграцию с результатом 
OK

.


Редактирование данных
449
Чтобы убедиться в том, что миграция сработала так, как и ожидалось, можно вос-
пользоваться интерактивной оболочкой:

>>> 
from learning_logs.models import Topic

>>> 
for topic in Topic.objects.all():
...
print(topic, topic.owner)
... 
Chess ll_admin 
Rock Climbing ll_admin 
>>>
После импортирования 
Topic
из 
learning_logs.models

мы перебираем все су-
ществующие темы, выводим каждую тему и имя пользователя, которому она при-
надлежит 

. Как видите, сейчас каждая тема принадлежит пользователю 
ll_admin

(Если при выполнении кода произойдет ошибка, попробуйте выйти из оболочки 
и запустить ее заново.)
ПРИМЕЧАНИЕ
Вместо миграции можно просто сбросить содержимое базы данных, 
но это приведет к потере всех существующих данных . Полезно научиться выполнять 
миграцию базы данных без нарушения целостности данных пользователей . Если вы 
хотите начать с новой базы данных, используйте команду 
python
manage.py
flush
для 
повторного построения структуры базы данных . Вам придется создать нового супер-
пользователя, а все данные будут потеряны .
Ограничение доступа к темам
В настоящее время пользователь, выполнивший вход, будет видеть все темы не-
зависимо от того, под какой учетной записью он вошел. Сейчас мы изменим при-
ложение, чтобы каждый пользователь видел только принадлежащие ему темы.
Внесите следующее изменение в функцию 
topics()
в файле 
views .py
:
views.py
...
@login_required
def topics(request):
"""Выводит список тем."""
topics = Topic.objects.filter(owner=request.user).order_by('date_added')
context = {'topics': topics}
return render(request, 'learning_logs/topics.html', context)
...
Если пользователь выполнил вход, в объекте запроса устанавливается атрибут 
request.user
с информацией о пользователе. Фрагмент кода 
Topic.objects.
filter(owner=request.user)
приказывает Django извлечь из базы данных только 
те объекты 
Topic
, у которых атрибут 
owner
соответствует текущему пользователю. 
Так как способ отображения не изменяется, изменять шаблон для страницы тем 
вообще не нужно.


450

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




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

    Басты бет