Быстрый старт на Django

Разработка 10 окт. 2016 г.

Быстрый старт на Django

Новый проект — это всегда интересно, новые задачи, новый опыт, новые знания. Начиная новый проект, хочется сразу броситься «в бой». Но перед этим приходится тратить время на первоначальную настройку окружения, подключения и установку зависимостей, создания структуры, инициализацию проекта. Порой это может занимать целый день.

Рутинная и во многом однообразная задача написания fab скриптов для запуска виртуального окружения — охлаждает пыл и отвлекает. Для того чтобы пропускать этот шаг и сразу приступать к разработке, был написан простенький fab скрипт для фальстарта нового проекта. Так что теперь достаточно написать falstart <название проекта>, выпить чашечку чая и приступать к работе над новым проектом.

Мы в WB—Tech в основном используем следующий стек: Python 3.x + Django + PostgreSQL + Celery + Redis.

А саму разработку ведем в виртуальном окружении Vagrant + VirtualBox под управлением OS Debian.

Falstart позволяет быстро развернуть виртуальное окружение и приступить к работе, ответив на десяток простых вопросов.

$ falstart awesome
> Django version ['1.9.5'] 1.10.2
> Debian version (for vagrant box) ['jessie64']
> Python version ['3.5.1'] 3.5.2
> Vagrant box IP-addr ['10.1.1.123'] 10.1.1.111
> Do you nead a POSTGRES? [Y/n]
> Do you nead a CELERY? [y/N] y
> Do you nead a REDIS? [y/N] y
> Do you nead a SENTRY? [y/N]
> Database name ['awesome_db']
> Database user ['awesome_user']
> Database pass ['vFeH1uJVN']

После чего выполняются скрипты, и через 10-15 минут будет готова структура проекта.

Пред зависимости

Для работы фальстарта необходим Vagrant и VirtualBox.

Установка

Фальстарт доступен для установки через pip.

$ pip install falstart

Результат

Пример результата: falstart-example.

Пример итоговой структуры проекта

$ tree
.
├── awesome
│   ├── celery.py
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── celery.cpython-35.pyc
│   │   ├── __init__.cpython-35.pyc
│   │   ├── settings.cpython-35.pyc
│   │   ├── settings_local.cpython-35.pyc
│   │   ├── urls.cpython-35.pyc
│   │   └── wsgi.cpython-35.pyc
│   ├── settings_local.py
│   ├── settings_local.py.example
│   ├── settings.py
│   ├── static
│   │   └── admin
│   │       ├── css
│   │       │   ├── base.css
│   │       │   ├── changelists.css
│   │       │   ├── dashboard.css
│   │       │   ├── fonts.css
│   │       │   ├── forms.css
│   │       │   ├── login.css
│   │       │   ├── rtl.css
│   │       │   └── widgets.css
│   │       ├── fonts
│   │       │   ├── LICENSE.txt
│   │       │   ├── README.txt
│   │       │   ├── Roboto-Bold-webfont.woff
│   │       │   ├── Roboto-Light-webfont.woff
│   │       │   └── Roboto-Regular-webfont.woff
│   │       ├── img
│   │       │   ├── calendar-icons.svg
│   │       │   ├── gis
│   │       │   │   ├── move_vertex_off.svg
│   │       │   │   └── move_vertex_on.svg
│   │       │   ├── icon-addlink.svg
│   │       │   ├── icon-alert.svg
│   │       │   ├── icon-calendar.svg
│   │       │   ├── icon-changelink.svg
│   │       │   ├── icon-clock.svg
│   │       │   ├── icon-deletelink.svg
│   │       │   ├── icon-no.svg
│   │       │   ├── icon-unknown-alt.svg
│   │       │   ├── icon-unknown.svg
│   │       │   ├── icon-yes.svg
│   │       │   ├── inline-delete.svg
│   │       │   ├── LICENSE
│   │       │   ├── README.txt
│   │       │   ├── search.svg
│   │       │   ├── selector-icons.svg
│   │       │   ├── sorting-icons.svg
│   │       │   ├── tooltag-add.svg
│   │       │   └── tooltag-arrowright.svg
│   │       └── js
│   │           ├── actions.js
│   │           ├── actions.min.js
│   │           ├── admin
│   │           │   ├── DateTimeShortcuts.js
│   │           │   └── RelatedObjectLookups.js
│   │           ├── calendar.js
│   │           ├── cancel.js
│   │           ├── change_form.js
│   │           ├── collapse.js
│   │           ├── collapse.min.js
│   │           ├── core.js
│   │           ├── inlines.js
│   │           ├── inlines.min.js
│   │           ├── jquery.init.js
│   │           ├── popup_response.js
│   │           ├── prepopulate_init.js
│   │           ├── prepopulate.js
│   │           ├── prepopulate.min.js
│   │           ├── SelectBox.js
│   │           ├── SelectFilter2.js
│   │           ├── timeparse.js
│   │           ├── urlify.js
│   │           └── vendor
│   │               ├── jquery
│   │               │   ├── jquery.js
│   │               │   ├── jquery.min.js
│   │               │   └── LICENSE-JQUERY.txt
│   │               └── xregexp
│   │                   ├── LICENSE-XREGEXP.txt
│   │                   ├── xregexp.js
│   │                   └── xregexp.min.js
│   ├── urls.py
│   └── wsgi.py
├── Makefile
├── manage.py
├── provision
│   ├── fabric_provisioner.py
│   ├── fabric_provisioner.pyc
│   └── templates
│       ├── environment.j2
│       ├── locale.gen.j2
│       └── nginx-host.j2
├── requirements-remote.txt
├── requirements.txt
├── Vagrantfile
├── var
│   ├── celery_awesome_worker.log
│   ├── celery_awesome_worker.pid
│   ├── celerybeat-schedule
│   └── gunicorn.pid
└── wheels
    ├── amqp-1.4.9-py2.py3-none-any.whl
    ├── anyjson-0.3.3-py3-none-any.whl
    ├── billiard-3.3.0.23-py3-none-any.whl
    ├── celery-3.1.23-py2.py3-none-any.whl
    ├── coverage-4.2-cp35-cp35m-linux_x86_64.whl
    ├── coverage_badge-0.1.2-py3-none-any.whl
    ├── Django-1.10.2-py2.py3-none-any.whl
    ├── django_rainbowtests-0.5.1-py3-none-any.whl
    ├── gunicorn-19.4.5-py2.py3-none-any.whl
    ├── kombu-3.0.37-py2.py3-none-any.whl
    ├── mccabe-0.4.0-py2.py3-none-any.whl
    ├── pep257-0.7.0-py2.py3-none-any.whl
    ├── pep8-1.7.0-py2.py3-none-any.whl
    ├── psycopg2-2.6.1-cp35-cp35m-linux_x86_64.whl
    ├── pyflakes-1.0.0-py2.py3-none-any.whl
    ├── pylama-7.0.7-py2.py3-none-any.whl
    ├── pytz-2016.7-py2.py3-none-any.whl
    └── redis-2.10.5-py2.py3-none-any.whl

Теперь можно перейти по адресу, указанному в приветственном сообщении Vagrantа, и увидеть начальную страницу Django.

==> awesome_vagrant: Machine 'awesome_vagrant' has a post `vagrant up` message. This is a message
==> awesome_vagrant: from the creator of the Vagrantfile, and not from Vagrant itself:
==> awesome_vagrant:
==> awesome_vagrant: awesome dev server successfuly started.
==> awesome_vagrant:     Connect to host with:
==> awesome_vagrant:     http://10.1.1.111/
==> awesome_vagrant:     or over ssh with `vagrant ssh`
==> awesome_vagrant:
==> awesome_vagrant:     Admin user credentials:
==> awesome_vagrant:       login: root
==> awesome_vagrant:       password: 123123
==> awesome_vagrant:

Другие статьи серии о о программных решениях, которые мы используем в своей работе:

Если хотите убедиться, что все делаете правильно или проконсультироваться по поводу разработки вашего проекта, напишите нам.

Подпишитесь на блог WB—Tech

Никакого спама, только анонсы новых статей!

Кирилл Гришанин

Последние 10 лет руковожу командой аналитиков, дизайнеров и разработчиков