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.

python manage.py startapp itens

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.

from django.db import models


class Arma(models.Model):
    poder = models.PositiveSmallIntegerField()
    compra = models.FloatField() # valor de compra
    venda = models.FloatField() # valor de venda
    secreta = models.BooleanField(default=False) #se a arma eh secreta ou disponivel na loja
    
    imagem = models.ImageField(upload_to="armas") #imagem do item


class Armadura(models.Model):
    poder = models.PositiveSmallIntegerField()
    compra = models.FloatField() # valor de compra
    venda = models.FloatField() # valor de venda
    secreta = models.BooleanField(default=False) #se a armadura eh secreta ou disponivel na loja
    
    imagem = models.ImageField(upload_to="armaduras") #imagem do item

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.

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'assets/itens').replace('\\', '/')

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = 'http://localhost:8000/assets/itens'

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 um comentário

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