Fork me on GitHub

Быстрый старт на Джанго Oct 10, 2016

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

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

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

falstart

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а и увидеть начальную страницу Джанго.

==> 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:

init app