Microtutoriais: mudanças entre as edições
Linha 47: | Linha 47: | ||
Relaxa, vai dar certo. Só falta rodar este comando: | Relaxa, vai dar certo. Só falta rodar este comando: | ||
$ python manage.py sql aexp | |||
CREATE TABLE `aexp_poll` ( | 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, | `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, | ||
`question` varchar(200) NOT NULL, | `question` varchar(200) NOT NULL, | ||
Linha 68: | Linha 70: | ||
para seu projeto dar conta de usar a base de dados que vc fez. | para seu projeto dar conta de usar a base de dados que vc fez. | ||
=Django4: Interlúdio na shell= | =Django4: Interlúdio na shell= |
Edição das 09h56min 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
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/