Microtutoriais: mudanças entre as edições

De Pontão Nós Digitais
Ir para navegaçãoIr para pesquisar
Linha 179: Linha 179:


= Django8: Criando respostas às URLs =
= Django8: Criando respostas às URLs =
(início da parte 3 do tutorial)


Quando vocẽ deu 'startapp nomedoapp', foi criado
Quando vocẽ deu 'startapp nomedoapp', foi criado
Linha 206: Linha 207:
def index(request):
def index(request):
     return HttpResponse("Hello, world. You're at the poll index.")</pre>
     return HttpResponse("Hello, world. You're at the poll index.")</pre>


= Django9: Utilizando os Templates do Django =
= Django9: Utilizando os Templates do Django =

Edição das 09h58min de 19 de agosto de 2011

Django1: Baixar e rodar em 3 comandos

Simplesme baixe o tar.gz do site e rode

   $ sudo python setup.py install

depois vá para um dir.. dê um

   $ python django-admin.py startproject mysite

inicie o servidor (entra no diretório do projeto)

   $ python manage.py runserver

pronto! só ir no endereço que o terminal soltou

Django2: Fazendo o bixinho acessar um BD.

   $ python manage.py syncdb

dá pau até que vc arrume o

   DATABASES = { 'default' :

do settings.py

Pode usar sqlite que fica imediato, mas eu arrumei um user mysql rapidinho.

Rode:

   $ python manage.py syncdb

Até que não sintamos nada de mais pegando.


Django3: Suas tabelas de BD são classes

Crie um app:

   $ python manage.py startapp sitezinhoCoxa

Coloque 'sitezinhoCoxa' no final da tupla INSTALLED_APPS do settings.py,

Crie estas duas classes no seu sitezinhoCoxa/models.py:

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()

Relaxa, vai dar certo. Só falta rodar este comando:

   $ python manage.py sql aexp

A saída deve ser algo muito próximo (ou idêntico) a isso:

CREATE TABLE `aexp_poll` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `question` varchar(200) NOT NULL,
    `pub_date` datetime NOT NULL
)
;
CREATE TABLE `aexp_choice` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `poll_id` integer NOT NULL,
    `choice` varchar(200) NOT NULL,
    `votes` integer NOT NULL
)
;

Pronto! só dê um:

   $ python manage.py syncdb

para seu projeto dar conta de usar a base de dados que vc fez.

Django4: Interlúdio na shell

(fim da parte 1 do tutorial oficial)

Para inicar uma shell com o ambiente bonitinho para fazer alterações na mão e colocar coisas nos BD:

   $ python manage.py shell 

Aí pode fazer coisas como:

[1]: from aexp.models import Poll, Choice
[2]: p = Poll(question="What's up?", pub_date=datetime.datetime.now())
[3]: p.save()
[4]: p.choice_set.create(choice='Not much', votes=0)

etc...

Django5: Habilite seu Admin

(inicio da parte 2 do tutorial)

Depois de descomentar 'django.contrib.admin' do INSTALLED_APPS do settings.py

   $ python manage.py syncdb # porque estamos com um app novo, o admin

Aí é preciso habilitar a URL para acessar o admin, isso é feito no url.py descomentando as seguintes três linhas:

from django.contrib import admin
admin.autodiscover()
(r'^admin/', include(admin.site.urls)),

A última fica ao final do bloco identado.

Pronto. Inicie o server

   $ python manage.py runserver

e vá para o endereço previsto, provavelmente:

   http://127.0.0.1:8000/admin/

Vualá seu admin tá rodando. Faz login aí, irmão.

Django6: Faça seu Admin responder

Depois de devidamente logado,

Crie um arquivo admin.py no diretório do app que startou com startapp. Coloque as seguintes linhas neste arquivo admin.py:

from XXXX.models import Poll
from XXXX.models import Choice
from django.contrib import admin

admin.site.register(Poll)  <----------------
admin.site.register(Choice)  <----------------

XXX você substitui por sitezinhoCoxa ou qualquer nome do app que você fez.

Recarregue a página e veja que o admin já possui uma entrada para o polls.


Troque:

admin.site.register(Poll)  <----------------
admin.site.register(Choice)  <----------------

por:

class ChoiceInline(admin.TabularInline):

   model = Choice
   extra = 3

class PollAdmin(admin.ModelAdmin):

   list_display = ('question', 'pub_date', 'was_published_today')
   fieldsets = [
       (None,               {'fields': ['question']}),
       ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
   ]
   inlines = [ChoiceInline]
   list_filter = ['pub_date']
   search_fields = ['question']
   date_hierarchy = 'pub_date'

admin.site.register(Poll, PollAdmin

E veja o resultado.


Django7: Seu Admin é customizável completamente

(último da parte 2 do tutorial)

no settings.py mude:

TEMPLATE_DIRS = (
    "/home/XXXX/mytemplates", # Change this to your own directory.
)

XXXX é o que você quer.

copie coisas como:

   django/contrib/admin/templates/admin/base_site.html

para

   /home/XXXXX/mytemplates/admin/base_site.html.

e não veja a mudança alguma AINDA. Ou tente fuçar no base_site.html

Django8: Criando respostas às URLs

(início da parte 3 do tutorial)

Quando vocẽ deu 'startapp nomedoapp', foi criado um diretório com 'nomedoapp'.

São 3 pequenas alterações para poder notar as mudanças. A primeira é no settings.py, ajuste a ROOT_URLCONF para nomedoPROJ/urls.py assim:

   ROOT_URLCONF = 'nomedoPROJ.urls'

Deixe eu urlpatterns deste jeit (ele fica no seu urls.py):

urlpatterns = patterns('',
    (r'^nodedoAPP/$', 'nomedoAPP.views.index'), <---- aqui
    (r'^admin/', include(admin.site.urls)),
)

Note a linha destacada que é a única adicionada. E tente perceber como ele endereça alguém chamado index dentro do views.py do diretório/app nodedoAPP

Coloque agora no views.py a função:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the poll index.")

Django9: Utilizando os Templates do Django

Agora é importante que você tenha ao menos as seguintes linhas no seu views.py:

from django.shortcuts import render_to_response
from nodedoAPP.models import Poll

def index(request):
    latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
    return render_to_response('nomedoAPP/index.html', {'latest_poll_list': latest_poll_list})

Aí falta-nos colocar este index.html no lugar. Na sua pasta de templates, cria uma pasta nomedoAPP, dentro faça um arquivo index.html rodando:

{% if latest_poll_list %}
    <ul>
    {% for poll in latest_poll_list %}
        <li><a href="/nomedoAPP/{{ poll.id }}/">{{ poll.question }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

Para ver o efeito, acesse o link relacionado. Algo como:

   http://127.0.0.1:8000/nomedoAPP/