Microtutoriais: mudanças entre as edições

De Pontão Nós Digitais
Ir para navegaçãoIr para pesquisar
mSem resumo de edição
 
(27 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
=Django1: Baixar e rodar em 3 comandos=
= Parte A: os 12 Microtutoriais baseados no tutorial oficial do django =


Simplesme baixe o tar.gz do site e rode
Foram batizados de [[Microtutoriais A]] e estão no link.
    $ 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.=
= Parte B: os 5 tutoriais para de fato fazer o que é necessário =


    $ python manage.py syncdb
Foram batizados de [[Microtutoriais B]] e estão no link.  
dá pau até que vc arrume o


    DATABASES = { 'default' :
[[Category:Lab_Macambira]]
 
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:
 
<pre>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()</pre>
 
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:
 
<pre>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
)
;</pre>
 
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:
<pre>[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)</pre>
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:
 
<pre>from django.contrib import admin
admin.autodiscover()
(r'^admin/', include(admin.site.urls)),</pre>
 
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:
 
<pre>from XXXX.models import Poll
from XXXX.models import Choice
from django.contrib import admin
 
admin.site.register(Poll)  <----------------
admin.site.register(Choice)  <----------------</pre>
 
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:
 
<pre>admin.site.register(Poll)  <----------------
admin.site.register(Choice)  <----------------</pre>
 
por:
 
</pre>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</pre>
 
E veja o resultado.
 
 
 
=Django7: Seu Admin é customizável completamente=
(último da parte 2 do tutorial)
 
no settings.py mude:
 
<pre>
TEMPLATE_DIRS = (
    "/home/XXXX/mytemplates", # Change this to your own directory.
)</pre>
 
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 oficial)
 
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):
 
<pre>urlpatterns = patterns('',
    (r'^nodedoAPP/$', 'nomedoAPP.views.index'), <---- aqui
    (r'^admin/', include(admin.site.urls)),
)</pre>
 
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:
 
<pre>from django.http import HttpResponse
 
def index(request):
    return HttpResponse("Hello, world. You're at the poll index.")</pre>
 
= Django9: Utilizando os Templates do Django =
 
Agora é importante que você tenha ao
menos as seguintes linhas no seu views.py:
 
<pre>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})</pre>
 
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:
 
<pre>{% 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 %}</pre>
 
Para ver o efeito, acesse o link relacionado. Algo como:
    http://127.0.0.1:8000/nomedoAPP/
 
[[Category:Lab Macambira]]

Edição atual tal como às 13h51min de 18 de setembro de 2011

Parte A: os 12 Microtutoriais baseados no tutorial oficial do django

Foram batizados de Microtutoriais A e estão no link.

Parte B: os 5 tutoriais para de fato fazer o que é necessário

Foram batizados de Microtutoriais B e estão no link.