Django Shell — интерактивная Python-консоль с загруженным окружением Django.
Запуск
python manage.py shell
Django автоматически загружает настройки, модели и все зависимости.
Основные операции
# Импортируем модели
from tasks.models import Task, Project
from django.contrib.auth.models import User
# Создание объектов
user = User.objects.create_user('testuser', password='pass123')
project = Project.objects.create(name='My Project')
task = Task.objects.create(title='First Task', owner=user, project=project)
# Чтение
Task.objects.all()
Task.objects.filter(status='todo')
task = Task.objects.get(pk=1)
# Обновление
task.status = 'done'
task.save()
# Удаление
task.delete()
Отладка запросов
from django.db import connection
Task.objects.all()
print(connection.queries) # список выполненных SQL-запросов
Тестирование кода
# Проверить бизнес-логику
task = Task.objects.first()
print(task.get_status_display())
print(str(task))
# Проверить queryset
qs = Task.objects.select_related('project').filter(owner__username='testuser')
print(qs.query) # показать SQL
IPython shell (расширенный)
pip install ipython
python manage.py shell # автоматически использует IPython
Возможности: автодополнение, история, цвета, ? для справки.
shell_plus (django-extensions)
pip install django-extensions ipython
# settings.py
INSTALLED_APPS = [
...
'django_extensions',
]
python manage.py shell_plus
# Автоматически импортирует ВСЕ модели!
При старте автоматически выполняется:
from tasks.models import Task, Project
from django.contrib.auth.models import User
# и все остальные модели из всех приложений
С IPython (рекомендуется)
python manage.py shell_plus --ipython
Возможности IPython: автодополнение Tab, ? и ?? для документации, цветная подсветка, история команд.
In [1]: Task? # справка о классе
In [2]: Task.objects. # Tab для автодополнения методов
In [3]: %sql Task.objects.all() # отладка SQL
In [4]: %run script.py # загрузить скрипт
Jupyter Notebook
python manage.py shell_plus --notebook
Открывает Jupyter Notebook с Django окружением — удобно для анализа данных.
Другие полезные команды django-extensions
python manage.py graph_models -a -o models.png # граф всех моделей
python manage.py show_urls # все URL проекта
python manage.py runserver_plus # werkzeug debugger
python manage.py create_command myapp # создать management команду
Выполнение скрипта
python manage.py shell < script.py
# или
python manage.py shell -c "from tasks.models import Task; print(Task.objects.count())"
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!