Django Wars [Parte 26]: Procurando alvos para atacar

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

A melhor parte do jogo é destruir os outros jogadores e tentar se tornar o melhor do melhor do mundo!
Para atacar alguém primeiro temos que ter uma lista de alvos, e é isso que vamos fazer agora.

Vamos começar criando a view.
Para isso, vou criar um novo arquivo na pasta views chamado luta.py, com a view que faz a listagem de possíveis alvos.

Acho que essa deve ser a view mais complicada que fizemos desde comecei com a idéia do Django-Wars.
E olha que essa já é a postagem de número 26 do projeto.

O que fazemos aqui é o seguinte: operações básicas do usuário de verificar se ele está logado e de dar o refresh nele, e depois fazemos uma listagem de alvos.
O que queremos é pegar usuários que tenham entre 60% e 140% do XP do usuário.
Assim criamos um “range” de jogadores que não sejam nem muito fortes e nem muito fracos em relação ao jogador logado.

Parar filtra, precisamos nos “conectar” a listagem de objetos do tipo Player, que definimos no models há um bom tempo atrás.
Para isso, Player.objects.
Se você digitar Player.objects.all() você estará pegando todos os jogadores.
Mas queremos filtrar e, para filtrar utilizamos filter e exclude.
No primeiro filtro, desejo informar que a experiência necessária deve ser maior-igual, nesse caso “greater-than-equal” (abreviado como gte), a 60% da experiência do nosso jogador.
Note que para falar de um filtro utilizamo o campo__comparação.
Esse primeiro filtro, em um SQL seria algo assim:

Mas, só isso não basta.
Além de pegar os jogadores cuja experiência seja maior-igual que 60% da experiência do nosso jogador, queremos que essa também seja menor que 140% da experiência do nosso jogador.
Se fossemos fazer um SQL teriamos algo nessa ideia:

A forma mais fácil de fazer esse AND é simplesmente empurrar outro filter() formando uma cadeia de filtros.
Assim, depois do primeiro .filter, podemos colocar outro .filter, e depois outro e outro, até que nossas condições estejam satisfeitas.
Não sendo o bastante, também podemos colocar chamadas como .exclude ou .oder_by.

Depois de utilizarmos nossos .filter, utilizei .exclude.
Deu pra entender o que eles fazem?
ISSO MESMO SNOOPY, eles excluem o que a gente não quer.
No caso, temos dois excludes diferentes, um para excluir o caso em que o id do jogador pesquisado no banco de dados seja o mesmo id que o jogador que está fazendo a caça, e o outro exclude é para remover da listagem jogadores que tenham experiência igual a 0.

Por fim, limitamos a nossa busca.
Não queremos listar tudo, queremos apenas 10.
Para limitar a busca no Django utilizamos a operação de cortar uma lista.

Em um primeiro momento é um pouco esquisito, mas é tudo tão simples que assusta.

Por fim, para terminarmos precisamos colocar esta view no arquivo urls.py e criar um template para ela.

URLS.PY

ALVOS.HTML

Tá quase acabando.
QUE GLÓRIA!
😀

Estou ouvindo o acústico do Ultraje a Rigor.
DA HORA!

Deixe uma resposta

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