|
|
(26 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/
| |
| | |
| | |
| = Django10: Organização das URLs. (Perfumaria) =
| |
| (último do terceiro tutorial)
| |
| | |
| No urls.py, você pode mudar:
| |
| | |
| urlpatterns = patterns('',
| |
| (r'^aexp/$', 'aexp.views.index'),
| |
| (r'^aexp/(?P<poll_id>\d+)/$', 'aexp.views.detail'),
| |
| (r'^aexp/(?P<poll_id>\d+)/results/$', 'aexp.views.results'),
| |
| (r'^aexp/(?P<poll_id>\d+)/vote/$', 'aexp.views.vote'),
| |
| (r'^admin/', include(admin.site.urls)),
| |
| )
| |
| | |
| para
| |
| | |
| urlpatterns = patterns('aexp.views',
| |
| (r'^aexp/$', 'index'),
| |
| (r'^aexp/(?P<poll_id>\d+)/$', 'detail'),
| |
| (r'^aexp/(?P<poll_id>\d+)/results/$', 'results'),
| |
| (r'^aexp/(?P<poll_id>\d+)/vote/$', 'vote'),
| |
| )
| |
| | |
| urlpatterns += patterns('',
| |
| (r'^admin/', include(admin.site.urls)),
| |
| )
| |
| | |
| Ou pode colocar todos os links referentes ao APP aexp dentro
| |
| de um arquivo. Seu urls.py fica assim:
| |
| | |
| from django.conf.urls.defaults import patterns, include
| |
| | |
| from django.contrib import admin
| |
| admin.autodiscover()
| |
| | |
| urlpatterns = patterns('',
| |
| (r'^polls/', include('polls.urls')),
| |
| (r'^admin/', include(admin.site.urls)),
| |
| )
| |
| | |
| E seu arquivo ./aexp/urls.py fica:
| |
| | |
| from django.conf.urls.defaults import patterns, include
| |
| | |
| urlpatterns = patterns('polls.views',
| |
| (r'^$', 'index'),
| |
| (r'^(?P<poll_id>\d+)/$', 'detail'),
| |
| (r'^(?P<poll_id>\d+)/results/$', 'results'),
| |
| (r'^(?P<poll_id>\d+)/vote/$', 'vote'),
| |
| )
| |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| [[Category:Lab Macambira]] | |