Шпаргалка по 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