Шпаргалка по Django

Команды django-admin и manage.py
Этот перечень ни в коем случае не является полным, здесь приведены наиболее часто используемые команды.
django-admin startproject myproject - создать новый проект (генерирует структуру)
python manage.py runserver - запустить тестовый сервер (на http://127.0.0.1:8000)
python manage.py runserver 0.0.0.0:80 - запустить тестовый сервер доступный извне (не
злоупотреблять)
django-admin startapp myapp - создать приложение в текущем проекте
django-admin makemessages - сгенерировать файлы с сообщениями подлежащими локализации
django-admin compilemessages - скомпилировать файлы локализации
python manage.py makemigrations - создать файлы миграций для БД
python manage.py sqlmigrate app 0001 - просмотр sql-кода, сгенерированного в миграции 0001
приложения app
python manage.py shell - запустить окно командной строки
python manage.py test - прогнать тесты (для прогона будет создана чистая БД)
python manage.py test --verbosity=2 - управление детализацией вывода при тестах (2-макс, 0 - мин)
python manage.py createsuperuser - создать пользователя-администратора
Операции с моделями
В примерах ниже Board - класс, board - экземпляр класса. Операция Пример кода Создать обьект без сохранения board = Board() Сохранить обьект (создать или обновить) board.save() Создать обьект и сохранить в базу Board.objects.create(name='...', desc='...') Получить список всех обьектов Board.objects.all() Получить список обьектов, фильтр по полю Board.objects.get(id=1)
Шаблоны тестов
Проверка HTTP-кода ответа для адреса с alias-ом home.
from django.core.urlresolvers import reverse
from django.test import TestCase
class HomeTests(TestCase):
def test_home_view_status_code(self):
url = reverse('home')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
Проверка, что URL вызывает правильную view
def test_home_url_resolves_home_view(self):
view = resolve('/')
self.assertEquals(view.func, home)
Шаблоны регулярных выражений для URL
В этом разделе приведены несколько примеров наиболее часто используемых шаблонов для файла urls.py.
Автогенерируемый первичный ключ
Регулярное выражение:
(?P<pk>\d+)
Пример использования:
url(r'^questions/(?P<pk>\d+)/$', views.question_details, name='question_details'),
| Подходит | Не подходит | |
| URL | Будет извлечено | URL |
| /questions/0/ | {‘pk’: ‘0’} | /questions/-1/ |
| /questions/1/ | {‘pk’: ‘1’} | /questions/test-1/ |
| /questions/934/ | {‘pk’: ‘934’} | /questions/abcdef/ |
Текстовая ссылка (ЧПУ)
Регулярное выражение:
(?P<slug>[-\w]+)-(?P<pk>\d+)
| Подходит | Не подходит | |
| URL | Будет извлечено | URL |
| /blog/hello-world-159/ | {‘slug’: ‘hello-world’, ‘pk’: ‘159’} | /blog/hello-world/ |
| /blog/a-0/ | {‘slug’: ‘a’, ‘pk’: ‘0’} | /blog/1/ |
| /blog/helloworld1/ | ||
| /hello-world-1-test/ | ||
Имя пользователя
Регулярное выражение:
(?P<username>[\w.@+-]+)
Пример использования:
url(r'^profile/(?P<username>[\w.@+-]+)/$', views.user_profile),
| Подходит | Не подходит | |
| URL | Будет извлечено | URL |
| /profile/vitorfs/ | {‘username’: ‘vitorfs’} | /profile/*vitorfs/ |
| /profile/vitor.fs/ | {‘username’: ‘vitor.fs’} | /profile/$vitorfs/ |
| /profile/@vitorfs/ | {‘username’: ‘@vitorfs’} | /profile/vitor fs/ |
Год
Регулярное выражение:
(?P<year>[0-9]{4})
Пример использования:
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
| Подходит | Не подходит | |
| URL | Будет извлечено | URL |
| /articles/2016/ | {‘year’: ‘2016’} | /articles/999/ |
| /articles/9999/ | {‘year’: ‘9999’} | |
Год/месяц
Регулярное выражение:
(?P<year>[0-9]{4})/(?P<month>[0-9]{2})
Пример использования:
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
| Подходит | Не подходит | |
| URL | Будет извлечено | URL |
| /articles/2016/01/ | {‘year’: ‘2016’, ‘month’: ’01’} | /articles/2016/1/ |
| /articles/2016/12/ | {‘year’: ‘2016’, ‘month’: ’12’} | |
Год / месяц / день
Регулярное выражение:
(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})
Пример использования:
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail)
| Подходит | Не подходит | |
| URL | Будет извлечено | URL |
| /articles/2016/01/01/ | {‘year’: ‘2016’, ‘month’: ’01’, day: ’01’} | /articles/2016/01/9/ |
| /articles/2016/02/28/ | {‘year’: ‘2016’, ‘month’: ’02’, ‘day’: ’28’} | /articles/2016/01/290/ |
| /articles/9999/99/99/ | {‘year’: ‘9999’, ‘month’: ’99’, ‘day’: ’99’} | |
Переиспользуемые шаблоны (Templates)
Шаблон для рендеринга формы, поддерживающий отображение валидности/невалидности полей, подсказок к полям, ошибок. Использует классы bootstrap4 и плагин widget-tweaks.
{% load widget_tweaks %}
{% for field in form %}
<div class="form-group">
{{ field.label_tag }}
{% if form.is_bound %}
{% if field.errors %}
{% render_field field class="form-control is-invalid" %}
{% for error in field.errors %}
<div class="invalid-feedback">
{{ error }}
</div>
{% endfor %}
{% else %}
{% render_field field class="form-control is-valid" %}
{% endif %}
{% else %}
{% render_field field class="form-control" %}
{% endif %}
{% if field.help_text %}
<small class="form-text text-muted">
{{ field.help_text }}
</small>
{% endif %}
</div>
{% endfor %}
Полезные дополнения/расширения Django
django-widget-tweaks
Позволяет управлять рендерингом элементов форм в шаблонах, а не в коде форм. Дает возможность добавлять CSS-классы и HTML- аттрибуты. Лицензия MIT.
pip install django-widget-tweaks
awesome-slugify
Позволяет преобразовывать строки, включающие не-ASCII символы в строки для URL. Лицензия GNU GPLv3.
Например, так:
from slugify import slugify
slugify('Я борщ', to_lower=True) # ya-borsch
pip install awesome-slugify

















