Django Wars [Parte 07]: As armas e armaduras o jogo

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

O nosso “Mafia Wars” não estaria completo se não existissem armas e armaduras para o jogador utilizar.
Para isto, criei uma nova app chamada itens no projeto.

Preciso definir os modelos das Armas e das Armaduras.
Para isso, alteramos o models.py da app que acabamos de criar para conter a definição dos nossos itens.

Note que poderíamos fazer apenas um modelo ao invés de dois, diferenciando-os por uma variável que definiria o tipo (se é arma ou armadura).

Note também que nos modelos temos um campo chamado imagem do tipo models.ImageField.
Nele estamos escrevendo a pasta em que desejamos que a imagem que for enviada seja salva.
Porém, ali não está o caminho absoluto para a basta que desejamos salvar, e sim um caminho relativo.
Mas, relativo a que?

A pasta que receberá uploads está descrito na variável MEDIA_ROOT, no settings.py.
O caminho nos modelos que descrevemos é relativo a esta configuração.
Logo, para que isto funcione, precisamos alterar essa variável.
Neste projeto, vou aproveitar que anteriormente criei a pasta assets para salvar os arquivos css e js do Twitter Bootstrap para criar uma pasta chamada itens, onde as imagens dos itens serão salvas.

Por fim, configurei também a variável MEDIA_URL.
Ao fazer o upload da imagem para o modelo, o Django não sabe a URL desta imagem, apenas o endereço dela no disco.
Se precisarmos chamar a url desta imagem a partir do objeto extraído do banco de dados, o Django poderia até ficar perdido sem saber o que dizer.
Porém, ao configurarmos a variável MEDIA_URL, ele a mapeia como se fosse um apelido (alias) para o endereço físico da imagem no HD.
Assim, o Django consegue dar a url para qualquer imagens que fizermos o upload.

Nosso projeto tá ficando porreta!
https://github.com/frenetic/django-wars

Deixe uma resposta

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