Regis da Silva
Publicado em:

Thu 19 February 2015

←Home

PostgreSql e Django - parte 3

Se você já leu o Tutorial Postgresql - parte 1 e PostgreSql e Python3 - parte 2 , este post é uma continuação. Aqui nós veremos como usar PostgreSQL no Django.

Para quem já leu Two Scoops of Django sabe que o PyDanny recomenda fortemente o uso do mesmo SGBD tanto em produção como em testes. Então esqueça sqlite para testes, use MySql ou Oracle ou PostgreSQL tanto em produção como em testes, e é sobre este último que vamos falar agora.

postgresql_django.png

Então vejamos aqui como configurar o Postgresql para ser usado no Django.

Precisamos criar o banco manualmente

Começando...

$ sudo su - postgres

Veja o prompt:

postgres@myuser:~$

Criando o banco

$ createdb mydb

Se existir o banco faça

$ dropdb mydb

e crie novamente. Para sair digite

$ exit

Django

Vamos criar um virtualenv e instalar o psycopg2, além do django.

virtualenv -p /usr/bin/python3 teste
cd teste
source bin/activate
pip install psycopg2 django
pip freeze
pip freeze > requirements.txt

Dica: Para diminuir o caminho do prompt digite

$ PS1="(`basename \"$VIRTUAL_ENV\"`):/\W$ "

Dica:

vim ~/.bashrc +
alias manage='python $VIRTUAL_ENV/manage.py'

Com isto nós podemos usar apenas manage ao invés de python manage.py.

Criando o projeto

django-admin.py startproject myproject .
cd myproject
python ../manage.py startapp core

Edite o settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydb',
        # 'NAME': os.path.join(BASE_DIR, 'mydb'),
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '', # 8000 is default
    }
}

Rode a aplicação

python manage.py migrate
python manage.py runserver

http://127.0.0.1:8000/ ou http://localhost:8000/

Edite o models.py

from django.db import models
from django.utils.translation import ugettext_lazy as _


class Person(models.Model):
    name = models.CharField(_('Nome'), max_length=50)
    email = models.EmailField(_('e-mail'), max_length=30, unique=True)
    age = models.IntegerField(_('Idade'))
    active = models.BooleanField(_('Ativo'), default=True)
    created_at = models.DateTimeField(
        _('Criado em'), auto_now_add=True, auto_now=False)

    class Meta:
        ordering = ['name']
        verbose_name = "pessoa"
        verbose_name_plural = "pessoas"

    def __str__(self):
        return self.name

Leia mais em

Tutorial Django 1.7

Como criar um site com formulário e lista em 30 minutos?

Edite o settings.py novamente

Em INSTALLED_APPS insira a app core.

INSTALLED_APPS = (
    ...
    'myproject.core',
)

Faça um migrate

python manage.py makemigrations core
python manage.py migrate
python manage.py createsuperuser

Um pouco de shell

$ python manage.py shell
Python 3.4.0 (default, Apr 11 2014, 13:05:18)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

Serve para manipular a app pelo terminal.

>>> from myproject.core.models import Person
>>> p = Person.objects.create(name='Regis',email='regis@example.com',age=35)
>>> p.id
>>> p.name
>>> p.email
>>> p.age
>>> p.active
>>> p.created_at
>>> p = Person.objects.create(name='Xavier',email='xavier@example.com',age=66,active=False)
>>> persons = Person.objects.all().values()
>>> for person in persons: print(person)
>>> exit()

Leia mais em

Tutorial Postgresql - parte 1

PostgreSql e Python3 - parte 2

Tutorial Django 1.7

Como criar um site com formulário e lista em 30 minutos?

How To Install and Configure Django with Postgres, Nginx, and Gunicorn

http://www.postgresql.org/docs/9.4/static/tutorial-createdb.html

http://www.postgresql.org/docs/9.4/static/index.html

http://www.postgresql.org/docs/9.4/static/tutorial-sql.html

Topo
comments powered by Disqus