O Django Wars foi idealizado e desenvolvido no Django 1.4. Algumas funcionalidades aqui descritas podem não funcionar ou funcionar de forma diferente em outras versões do Django
Faltam só mais alguns posts para o projeto terminar.
Claro, isso é uma teoria 😀
Mas uma coisa que está começando a sair do controle é o nosso arquivo views.py.
No momento, ele tem 256 linhas, e vai crescer ainda mais.
Você pode conferir o views.py no GitHub (@1340a86b35).
O padrão do desenvolvimento do Django é em apps.
Cada app tem seu arquivo views.py.
Assim, se você precisar reutilizar alguma app, basta copiar e colar no próximo projeto.
Se você não se lembra, ao executar o comando manage.py startapp nomedaapp, dentro da pasta criada, além do arquivo models.py, foi criado o arquivo views.py, onde você pode colocar as views da app.
Toda via, vale ressaltar que este padrão é uma recomendação, não uma obrigatoriedade.
Pode-se muito bem utilizar outros padrões para alcançar seus objetivos com Django, e é o que estamos fazendo.
No nosso projeto, as apps não serão reutilizadas em outro lugar, por isso fui colocando todas as views num único arquivo views.py.
Mas, como eu falei, o arquivo já está grande, e vai crescer mais um pouco até o final do projeto.
Isso prejudica a leitura e compreensão das views.
O que vamos fazer é simples: quebrar esse arquivo views.py em multiplos arquivos menores onde as views fazem sentido agrupadas.
Por exemplo, um arquivo para as coisas da loja (listagem, compra e venda), outro arquivo para o inventário e por ai vai.
Aqui, o trabalho vai ser bem braçal.
Vou fazer uma pequena listagem do passo-a-passo que eu fiz para vocês poderem replicar no projeto de vocês.
1 – criei uma pasta chamada views
2 – criei o arquivo __init__.py dentro desta pasta. Precisamos deste arquivo para que o interpretador Python possa procurar por módulos dentro desta pasta.
3 – criei o arquivo crimes.py e coloquei dentro dele todas as views relacionadas a crimes, assim como os imports necessários (crimes.py @ b7c26a9113).
4 – criei o arquivo loja.py e coloquei dentro dele todas as views relacionadas a loja, assim como os imports necessários (loja.py @ b7c26a9113).
5 – criei o arquivo inventario.py e coloquei dentro dele todas as views relacionadas ao inventário, assim como os imports necessários (inventario.py @ b7c26a9113).
5 – criei o arquivo player.py e coloquei dentro dele todas as views relacionadas com o player (usuário), assim como os imports necessários (player.py @ b7c26a9113).
6 – criei o arquivo site.py e coloquei dentro dele todas as views relacionadas com as páginas do django-wars (index, sobre etc), assim como os imports necessários (site.py @ ea46760587).
7 – Agora, temos um arquivo que não precisamos mais. Assim, sem amor e nem carinho, eu o DELETO! Tchau tchau views.py.
8 – Por fim, precisamos corrigir o arquivo urls.py para apontar para a nova localização das views.
urls.py:
from django.conf.urls import patterns, include, url import djangowars.views.crimes import djangowars.views.inventario import djangowars.views.loja import djangowars.views.player import djangowars.views.site # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^$', djangowars.views.site.index), url(r'^registrar/$', djangowars.views.player.registrar), # pagina de cadastro url(r'^login/$', djangowars.views.player.logar), # pagina de login url(r'^crimes/$', djangowars.views.crimes.crimes), url(r'^crimes/cometer/1/$', djangowars.views.crimes.cometer_crime1), url(r'^crimes/cometer/2/$', djangowars.views.crimes.cometer_crime2), url(r'^loja/$', djangowars.views.loja.loja), # pagina de loja url(r'^loja/comprar/armadura/(\d+)/$', djangowars.views.loja.comprar_armadura), # pagina de loja url(r'^loja/vender/armadura/(\d+)/$', djangowars.views.loja.vender_armadura), # pagina de loja url(r'^loja/comprar/arma/(\d+)/$', djangowars.views.loja.comprar_arma), # pagina de loja url(r'^loja/vender/arma/(\d+)/$', djangowars.views.loja.vender_arma), # pagina de loja url(r'^inventario/$', djangowars.views.inventario.inventario), url(r'^inventario/equipar/armadura/(\d+)/$', djangowars.views.inventario.equipar_armadura), url(r'^inventario/equipar/arma/(\d+)/$', djangowars.views.inventario.equipar_arma), # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls)), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), )
Por fim, apenas duas pequenas observações:
1 – Vale a pena dar uma lida nesse debate sobre organização do views.py (em inglês).
2 – O projeto pode ser visto em:
https://github.com/frenetic/django-wars