Django Wars [Parte 18]: Equipando armas e armaduras

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

No post anterior criamos o inventário do usuário.
Porém, apenas fizemos a listagem dos itens que o usuário possui.
Agora, precisamos criar a ação de equipar uma arma e uma armadura.
Vai dar tanto trabalho que estou vendo Carminha se lascar enquanto escrevo 😀

No artigo anterior, definimos no template quais seriam as urls para ativar as armas e armaduras.
Agora, precisamos defini-las no arquivo urls.py.


url(r'^inventario/equipar/armadura/(\d+)/$', djangowars.views.equipar_armadura),
url(r'^inventario/equipar/arma/(\d+)/$', djangowars.views.equipar_arma),

Até agora tá muito difícil.
E Max sequestrou Carminha…
Agora precisamos escrever os métodos no views.py.

#pagina para equipar uma armadura
def equipar_armadura(request, item):
    if not request.user.is_authenticated():
        return redirect(logar)
    
    #verifica se a armadura existe no banco de dados
    armadura = get_object_or_404(Armadura, pk=item)
    #recupera o usuario que esta logado
    player = request.user.get_profile()
    
    #antes de ativar a armadura, tem que ver se o usuario possui essa armadura
    if armadura in player.armaduras.all():
        #coloca a armadura como ativa
        player.armadura_ativa = armadura
        player.save() #salva a armadura
    
    #redireciona para a pagina do inventario
    return redirect(inventario)

A sequência para equipar uma armadura é simples.
O id da armadura será passado pela URL, definida no urls.py.
Após verificarmos se o usuário está logado ou não, precisamos verificar se a armadura passada existe no banco de dados.
Para isso, usamos a função get_object_or_404.
Depois disso, precisamos verificar se a armadura está no inventário de armaduras do usuário.
Basta fazer um simples if armadura in player.armaduras.all().
Por fim, só marcar a armadura como ativa e partir para o abraço.

O código fonte do projeto pode ser visto aqui:
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 *