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

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,758
Реакции
1,449
Credits
25,276

SHpargalka-po-Django.png

Команды django-admin и manage.py​

Этот перечень ни в коем случае не является полным, здесь приведены наиболее часто используемые команды.
django-admin startproject myproject - создать новый проект (генерирует структуру)

python manage.py runserver - запустить тестовый сервер (на Для просмотра ссылки Войди или Зарегистрируйся)

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 - создать пользователя-администратора

Операции с моделями​

1
2
3
4
5
6
7
8
9
В примерах ниже Board - класс, board - экземпляр класса.


Операция Пример кода
Создать обьект без сохранения board = Board()
Сохранить обьект (создать или обновить) board.save()
Создать обьект и сохранить в базу Board.objects.create(name='...', desc='...')
Получить список всех обьектов Board.objects.all()
Получить список обьектов, фильтр по полю Board.objects.get(id=1)

Шаблоны тестов​

Проверка HTTP-кода ответа для адреса с alias-ом home.
1
2
3
4
5
6
7
8
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
1
2
3
def test_home_url_resolves_home_view(self):
view = resolve('/')
self.assertEquals(view.func, home)

Шаблоны регулярных выражений для URL​

В этом разделе приведены несколько примеров наиболее часто используемых шаблонов для файла urls.py.

Автогенерируемый первичный ключ

Регулярное выражение:
1 (?P<pk>\d+)

Пример использования:
1url(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/


Текстовая ссылка (ЧПУ)

Регулярное выражение:
1(?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/
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,758
Реакции
1,449
Credits
25,276
Имя пользователя

Регулярное выражение:
1(?P<username>[\w.@+-]+)

Пример использования:
1url(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/

Год

Регулярное выражение:
1(?P<year>[0-9]{4})

Пример использования:
1url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)

Подходит
Не подходит

URLБудет извлеченоURL/articles/2016/{‘year’: ‘2016’}/articles/999//articles/9999/{‘year’: ‘9999’}


Год/месяц

Регулярное выражение:
1(?P<year>[0-9]{4})/(?P<month>[0-9]{2})

Пример использования:
1url(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’}


Год / месяц / день

Регулярное выражение:
1(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})

Пример использования:
1url(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’}
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,758
Реакции
1,449
Credits
25,276

Переиспользуемые шаблоны (Templates)​

Шаблон для рендеринга формы, поддерживающий отображение валидности/невалидности полей, подсказок к полям, ошибок. Использует классы bootstrap4 и плагин widget-tweaks.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{% 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.
1pip install django-widget-tweaks

awesome-slugify
Позволяет преобразовывать строки, включающие не-ASCII символы в строки для URL. Лицензия GNU GPLv3.

Например, так:
1
2
from slugify import slugify
slugify('Я борщ', to_lower=True) # ya-borsch

1pip install awesome-slugify