Batteries Included Django



Accelerate your Project with the Ecosystem



by Kevin Stone
CTO/Founder Subblime

GH: kevinastone | TW: @kevinastone | LI: kevinastone

Our Current Requirements.txt

distribute>=0.6.28
mysql-python>=1.2.4
Django>=1.5
pillow
south>=0.8,<2.0
sorl-thumbnail
hamlpy
requests>=1.0
djangorestframework>=2.3.4
unicodecsv

# Django Enhancements
django-extensions
django-model-utils
django-templated-email
django-grappelli>=2.4.5
django-floppyforms
django-filter
django-braces

# Datetime
pytz
iso8601
python-dateutil>=1.5,<2.0

# Deployment
uwsgi
Werkzeug
fabric

# Analytics
numpy
pandas
# Caching
redis
hiredis
django-redis-cache
johnny-cache

# Django Compressor
django-compressor>=1.3
lxml
BeautifulSoup<4.0
cssmin
slimit
django-sekizai

# Celery
django-celery-with-redis
django-celery-transactions

# Social
gdata
google-api-python-client
oauth2client
django-social-auth>=0.7.22
facepy

# Services
mixpanel-celery>=0.6.0
raven>=3.0

lettuce>=0.2.18

Testing Requirements.txt



factory_boy>=1.3,<2.0    # Guard against potential 2.0 breaking changes
mock

# Nose
nose<1.3	# Nose 1.3 breaks test discovery somehow
django-nose
coverage
nose-exclude
nose-progressive>=1.4.1
nosexcover
yanc
xtraceback

# Validaiton
pep8
flake8
Lettuce Requirements

# Make sure you have Chromium installed (or appropriate for your dev platform)
splinter>=0.5    # Need 0.5 for PhantomJS support
selenium>=2.28	# Need 2.28 for PhantomJS support

Basic Includes for Just About Every Project


  • Pillow (Image Manipulation)
  • sorl-thumbnail (Thumbnail Generation)
  • South (DB Migrations)
  • Requests (HTTP client)
  • Django-Rest-Framework* (ReST API endpoint)

DateTime Fixes
  • pytz (Timezone support)
  • iso8601 (date formatting)
  • python-dateutil (parsing and translation)

  • unicodecsv (Fixes encoding for CSV import/export)
*or Tastypie or Django-Piston, but DRF is way better

General Django Helpers


  • django-extensions
    • runserver_plus + shell_plus management commands (Werkzeug Debugger)
    • Useful generic model fields (CreationDateTimeField, etc)
  • django-model-utils
    • Improved Querysets (PassThroughManager, InheritanceManager)
  • django-braces
    • CBV Mixins (instead of ugly decorators)

Django CRUD Helpers


  • django-filter
    • Don't write your own query string parameterizations
  • django-floppyforms
    • Better templates for django forms
    • import floppyforms as forms

Admin Tools
  • django-grappelli (nicer skin)
  • django-extensions (again)
    • ForeignKeyAutocompleteAdmin makes admin useable for relations (search field instead of dropdown)

Batch Processing

Celery

  • django-celery
  • django-celery-transactions
    • Delays task delivery until transactions commit to eliminate race conditions

Mail

  • django-templated-email
    • Template support for mail subjects, and HTML + Plain versions

Cleaner Frontend Code


  • HamlPy (Template loader)
    • More readable and concise html generation
    • (Also more version control friendly since it's line based)

  • Django Compressor
    • Supports LessCSS and Coffeescript
    • lxml, BeautifulSoup, cssmin, slimit for minification
    • NPM Packages: less, jshint, recess, uglify-js, coffee-script

  • django-sekizai
    • Adding resources in template fragments on demand

Haml Templates


<p>A bunch of placeholder text about your company.</p>
<div class="actions">
    <div class="action-container pull-left">
        <a class="flat-button block-level call-to-action" href="{% url "join" %}">Join our Site!</a>
    </div>
    <div class="action-container pull-right">
        <a class="flat-button block-level call-to-action" href="{% url "login" %}">Sign In</a>
    </div>
</div>

%p
    A bunch of placeholder text about your company.
.actions
    .action-container.pull-left
        %a.flat-button.block-level.call-to-action{'href': '{% url "join" %}'}
            Join our Site!
    .action-container.pull-right
        %a.flat-button.block-level.call-to-action{'href': '{% url "login" %}'}
            Sign In

Another Haml Template

<div class="product-information-container">
    <div class="product-information">
        <h4>
            {% if headline %}{{ headline }}{% endif %}
            {% if url %}
            <p>
                <p>
                    <a href="{{ url }}">{{ url|format_url }}</a>
                </p>
            </p>
            {% endif %}
        </h4>
        {% if description %}
        <p class="description">{{ description }}</p>
    </div>
</div>
.product-information-container
    .product-information
        %h4
            - if headline
                = headline
            - if url
                %p
                    %a{'href': '={url}'}
                        = url|format_url
        - if description
            %p.description<
                = description

Django Sekizai

Base Template
{% render_block "js" %}
or with Django Compressor Processors (Coffeescript)

{% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %}

Included Fragment Example
- addtoblock "js"
    %script{'type': 'text/javascript', 'src': '{% static "js/jquery/jquery.timeago.js" %}'}
- endaddtoblock "js"
Included Fragment Example (Coffeescript)
{% addtoblock "js" %}
    <script type="text/coffeescript" src="{% static js/directives/date.coffee" %}"></script>
{% endaddtoblock "js" %}

Algorithmic/Data Science


  • NumPy
  • Pandas
    • Powerful data transformations (esp. for time series data)

Other Useful Libs
  • SciPy
    • Algorithms galore
  • NLTK (language processing + statistics primitives)
  • PyMC (Bayesian inference)

Caching


  • redis
  • hiredis (faster bindings for redis)
  • django-redis-cache (cache backend using redis)

  • johnny-cache (transparent queryset caching)

APIs and Authentication


  • django-social-auth (oauth consumers)
  • Google
    • oauth2client
    • google-api-python-client
    • gdata
  • Facebook
    • facepy

  • mixpanel-celery
  • raven (for Sentry)

Deployment


  • Fabric (automation)
  • uWSGi (WSGi container)
  • Werkzeug (Lightweight WSGi framework)

Testing


  • Factory-boy (Fixtures)
  • mock (Mocking and Stubbing)

Feature Tests
  • lettuce
  • selenium (web browser automation)
  • splinter (selenium wrapper)

Validation
  • pep8 (coding standards)
  • flake8 (static analysis)

Nose Plugins

  • nose
  • django-nose
    • Nose based Test Runner for Django
  • coverage
    • Code Coverage
  • nose-exclude
    • Adds --exclude-dir= flags to skip certain dirs
  • nose-progressive
    • Progress bar for test runner
  • nosexcover (worst package name ever)
    • Code coverage for xunit results (for Jenkins)
  • yanc
    • Output Color-izer
  • xtraceback
    • Better Test Tracebacks



Questions?



The End





About the Author:

Kevin Stone is the CTO and Founder of Subblime

Interested in working on these challenges?  Subblime is hiring
Made with Slides.com