Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Начинаем Django приложение правильно

Начинаем Django приложение правильно

Никита Соболев (Wemake.Services) @ Moscow Python Meetup 54
"В современном мире есть куча нюансов, которые нужно учесть при старте вашего приложения: конфигурация, деплой, тесты, CI, удобство разработки. Расскажу про Bleeding Edge технологии, основная цель которых сделать ваш проект безопасным и удобным".
Видео: http://www.moscowpython.ru/meetup/54/starting-django-app/

Moscow Python Meetup
PRO

March 22, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Никита Соболев
    github.com/sobolevn

    View Slide

  2. Repeatable Software
    Development Process
    https://wemake.services/meta/

    View Slide

  3. View Slide

  4. • Все проекты должны быть одинаковыми по
    структуре и правилам
    • Приемка работы - должна быть одинаково сурова
    для всех проектов
    • Проекты не должны застывать в legacy

    View Slide

  5. bit.ly/wms-django

    View Slide

  6. Документация
    docs/
    wemake-django-template.rtfd.io

    View Slide

  7. View Slide

  8. Зависимости
    Pipfile, Pipfile.lock

    View Slide

  9. We love our build as we
    love our processes
    Repeatable!

    View Slide

  10. pipenv
    • Pipfile / Pipfile.lock уже сегодня
    • Deterministic builds
    • Управляет virtualenv
    • Проверяет безопасность зависимостей

    View Slide

  11. py.test
    tests/, setup.cfg

    View Slide

  12. py.test plugins
    • pytest-django
    • pytest-cov
    • pytest-xdist
    • pytest-isort
    • pytest-flake8

    View Slide

  13. Линтинг
    Pipfile, setup.cfg

    View Slide

  14. Почему я люблю строгий
    линтинг?
    • Он помогает при Code Review
    • Он делает код красивым и читаемым
    • Он помогает искать ошибки

    View Slide

  15. flake8 vs pylint

    View Slide

  16. – Александр Шорин
    «Можно pylint для отчетов использовать».

    View Slide

  17. mypy
    setup.cfg

    View Slide

  18. View Slide

  19. ~/Desktop
    » mypy test_mypy.py
    test_mypy.py:2: error:
    Incompatible return value type (got "List[str]", expected "str")
    test_mypy.py:5: error:
    Argument 1 to "save_me_from_errors" has incompatible type "None"; expected "str"

    View Slide

  20. Developer Happiness
    .pre-commit.yaml, docker-compose.yml

    View Slide

  21. DevOps
    Happiness
    docker-compose.yml, docker/docker-compose.prod.yml,
    .gitlab-ci.yml

    View Slide

  22. View Slide

  23. View Slide

  24. Caddy

    View Slide

  25. View Slide

  26. Team Lead
    Happiness
    docker/ci.sh

    View Slide

  27. Установка

    View Slide

  28. ~/Desktop
    » pip install cookiecutter
    ~/Desktop
    » cookiecutter gh:wemake-services/wemake-django-template
    ~/Desktop/test_project
    » docker-compose run --rm web python manage.py migrate
    ~/Desktop/test_project
    » docker-compose up

    View Slide

  29. Обновление

    View Slide

  30. View Slide

  31. Notable mentions
    .editorconfig
    .idea
    .python-version
    doc8
    @dependabot

    View Slide

  32. Для чего не подходит?

    View Slide

  33. – Александр Зеленяк
    «Вся тусовка на Гитхабе».

    View Slide

  34. View Slide

  35. Что еще предстоит
    • Добавить jones-complexity и wemake-python-
    styleguide
    • Допилить mypy-django-queryset
    • Ждать Gitlab и ReadTheDocs
    • Переехать на Postgres 10, Django 2

    View Slide

  36. Хотите себе такой
    проект? Пишите!
    [email protected]

    View Slide

  37. Вопросы?
    github.com/sobolevn

    View Slide