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

0
1714

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

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

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

Регулярное выражение:

&nbsp;(?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

источник