Django Must Have – South – python-decouple



Django Must Have – South – python-decouple

0 0


django-must-have

Slides da Palestra Django Must Have ministrada no IX Encontro do PUG-PI

On Github gtsalles / django-must-have

Django Must Have

Gustavo Carvalho - gtsalles.com.br

South

south.aeracode.org

Pra que serve?

"This is South, intelligent schema and data migrations for ​Django projects"

Porque é um must have?

  • Nada de ALTER TABLE
  • Nada de DROP DATABASE, CREATE DATABASE, manage.py syncdb

Como usar?

  • pip install south
  • INSTALLED_APPS
  • python manage.py schemamigration --initial [app_name]
  • python manage.py schemamigration --auto [app_name]
  • python manage.py migrate [app_name]

Como usar?

Data Migrations

  • python manage.py datamigration --auto [app_name]
  • python manage.py migrate [app_name]

django.db.migrations

Objetivo: £2,500

Adquirido: £17,952

Como usar?

  • python manage.py makemigrations [app_name]
  • python manage.py migrate

python-decouple

pypi.python.org/pypi/python-decouple

Pra que serve?

"Strict separation of settings from code"

Porque é um must have?

  • Nada de:
    • local_settings.py
    • production_settings.py
  • Sem senhas, keys, etc, hard-coded

Como usar?

pip install python-decouple

Como usar?

settings.ini
[settings]

KEY = A-RANDOM-SECRET-KEY
DEBUG = True
DB_HOST = localhost
DB_USER = root
DB_PWD = MY-DATABASE-PASSWORD
DB_PORT = 3306
                        
settings.py
from decouple import config

SECRET_KEY = config('KEY')
DEBUG = config('DEBUG', cast=bool)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': config('DB_NAME'),
        'USER': config('DB_USER'),
        'PASSWORD': config('DB_PWD', default=''),
    }
}
                        

crispy-forms

django-crispy-forms.readthedocs.org/en/latest/

Pra que serve?

"Have full control without writing custom form templates. All this without breaking the standard way of doing things in Django."

Porque é um must have?

  • Permite organizar campos, classes, fieldsets, etc, etc
  • HTML mais enxuto

Como usar?

  • pip install django-crispy-forms
  • INSTALLED_APPS
  • CRISPY_TEMPLATE_PACK = 'template'

    • bootstrap
    • bootstrap3
    • foundation

Como usar?

forms.py
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Fieldset, ButtonHolder, Submit

class MeuForm(forms.ModelForm):
    ...
    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_action = '/url/form/'
        self.helper.form_method = 'GET'
        self.helper.layout = Layout(
            Fieldset(None, 'nome', 'sexo', 'estado_civil', css_class='span3'),
            Fieldset(None, 'empregado', 'cnh', 'carro', css_class='span3'),
            Fieldset(None, 'formacao', css_class='span2'),
            Fieldset(None, 'categoria', css_class='span2'),
            Fieldset(None, 'idiomas', css_class='span2'),
            ButtonHolder(
                Submit('submit', 'Submit', css_class='button white')
            )
        )
        super(MeuForm, self).__init__(*args, **kwargs)
                        

Como usar?

form.html
{% load crispy_forms_tags %}

{% crispy filter_form %}
                        

django-widget-tweaks

pypi.python.org/pypi/django-widget-tweaks

Pra que serve?

"Tweak the form field rendering in templates, not in python-level form definitions."

Porque é um must have?

  • Algumas vezes não tem escapatória, precisa-se alterar propriedades do HTML, no HTML
  • Com o widget-tweaks é simples

Como usar?

  • pip install django-widget-tweaks
  • widget_tweaks no INSTALLED_APPS

Como usar?

{% load widget_tweaks %}

{% render_field form.field_name class="classe1 classe2" placeholder="a nice placeholder" %}

{% render_field form.title class+="css_class_1 css_class_2" %}

{{ form.text|attr:"rows:20"|attr:"cols:20"|attr:"title:Hello, world!" }}
                            

django-taggit

github.com/alex/django-taggit

Pra que serve?

"django-taggit a simpler approach to tagging with Django."

Porque é um must have?

  • Porque é simples, e faz bem o que se dispõe.

Como usar?

  • pip install django-taggit
  • taggit no INSTALLED_APPS

Como usar?

from django.db import models

from taggit.managers import TaggableManager

class Comida(models.Model):
# ... outros campos

tags = TaggableManager()
                        

Como usar?

>>> maca = Comida.objects.create(name="maca")
>>> maca.tags.add("vermelha", "verde", "deliciosa")
>>> maca.tags.all()
[Tag: verde, Tag: verde, Tag: deliciosa]
>>> maca.tags.remove("verde")
>>> maca.tags.all()
[Tag: verde, Tag: deliciosa]
>>> Comida.objects.filter(tags__name__in=["vermelha"])
[Comida: maca, Comida: morango]
                        

django-debug-toolbar

github.com/django-debug-toolbar/django-debug-toolbar

Pra que serve?

"The Django Debug Toolbar is a configurable set of panels that display various debug information about the current request/response and when clicked, display more details about the panel's content."

Porque é um must have?

  • Exibe informações importantes sobre a sua aplicação
  • Ajuda no processo de otimização

Como usar?

  • pip install django-debug-toolbar
  • debug_toolbar no INSTALLED_APPS
  • DEBUG = True

Django Suit

djangosuit.com

Pra que serve?

"Modern theme for Django admin interface"

Porque é um must have?

  • Não é bem um must-have :)
  • Funciona bem quando você cansar do verde.

Como usar?

  • pip install django-suit
  • suit no INSTALLED_APPS antes do django.contrib.admin
    from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
    
    TEMPLATE_CONTEXT_PROCESSORS = TCP + (
        'django.core.context_processors.request',
    )
                                

django-reversion

django-reversion.readthedocs.org/en/latest/

Pra que serve?

django-reversion can be used to add a powerful rollback and recovery facility to your admin site.

Porque é um must have?

  • Controle de alterações dos models, inclusive com rollback

Como usar?

  • pip install django-reversion
  • reversion no INSTALLED_APPS
  • manage.py syncdb ou manage.py migrate

Como usar?

import reversion

reversion.register(YourModel)
                        

Como usar?

import reversion

class YourModelAdmin(reversion.VersionAdmin):

    pass

admin.site.register(YourModel, YourModelAdmin)
                        

django-compressor

django-compressor.readthedocs.org/en/latest/

Pra que serve?

"Compresses linked and inline JavaScript or CSS into a single cached file."

Porque é um must have?

  • Diminuir a quantidade de requisições ao site
  • Diminuir o tamanho dos arquivos requisitado
  • Cache :)

Como usar?

  • pip install django-compressor
  • compressor no INSTALLED_APPS
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    # other finders..
    'compressor.finders.CompressorFinder',
)
                            

Como usar?


{% load compress %}

{% compress css %}
< link rel="stylesheet" href="css/one.css" type="text/css" charset="utf-8">
< style type="text/css">p { border:5px solid green;}< /style>
< link rel="stylesheet" href="css/two.css" type="text/css" charset="utf-8">
{% endcompress %}

                        
< link rel="stylesheet" href="CACHE/css/fb7a124.css" type="text/css" charset="utf-8">
                        

django-storages

django-storages.readthedocs.org/en/latest/

Pra que serve?

django-storages is a collection of custom storage backends for Django.

Porque é um must have?

  • Retira a tarefa de servir estáticos do seu servidor
  • Agiliza esse processo

Como usar?

  • pip install django-storages
  • storages no INSTALLED_APPS

Como usar?

  • DEFAULT_FILE_STORAGE = 'libs.storages.S3Storage.S3Storage'
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_STORAGE_BUCKET_NAME
  • Amazon S3
  • Apache Libcloud
  • Azure Storage
  • CouchDB
  • FTP
  • MongoDB
  • SFTP
  • Python Social Auth
  • Django Selectable
  • Django ckeditor
  • Django Image Cropping
  • Easy Thumbnails
  • Django Rest Framework

Perguntas?

Obrigado :)

gtsalles.com.br