Django Wars [Parte 22]: Organizando o arquivo views.py

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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *