Nessa aula vamos criar as funcionalidades de comentários e avaliação das aulas.
Crie a tabela comentários no banco de dados.
class Comentarios(models.Model):
usuario = models.ForeignKey(Usuario, on_delete = models.DO_NOTHING)
comentario = models.TextField()
data = models.DateTimeField(default = datetime.now)
aula = models.ForeignKey(Aulas, on_delete = models.DO_NOTHING)
def __str__(self) -> str:
return self.usuario.nome
Cadastre na área administrativa.
admin.site.register(Comentarios)
Crie uma URL comentários.
path('comentarios/', views.comentarios, name = 'comentarios'),
Crie a view comentarios.
def comentarios(request):
usuario_id = int(request.POST.get('usuario_id'))
comentario = request.POST.get('comentario')
aula_id = int(request.POST.get('aula_id'))
comentario_instancia = Comentarios(usuario_id = usuario_id,
comentario = comentario,
aula_id = aula_id)
comentario_instancia.save()
comentarios = Comentarios.objects.filter(aula = aula_id).order_by('-data')
somente_nomes = [i.usuario.nome for i in comentarios]
somente_comentarios = [i.comentario for i in comentarios]
comentarios = list(zip(somente_nomes, somente_comentarios))
return HttpResponse(json.dumps({'status': '1', 'comentarios': comentarios }))
em Aula.html:
{% extends 'base.html'%}
{% block 'titulo'%}
Aula
{% endblock%}
{% block 'body' %}
<div class="container">
<br>
<br>
<h1>{{aula.nome}}</h1>
<hr>
<video width="100%" controls>
<source src="{{aula.aula.url}}" type="video/mp4">
</video>
<hr>
<h1>Faça seu comentário: </h1>
<input id="comentario" type="text" placeholder="Comentário..." class="form-control">
<br>
<input onclick="envia_comentario()" type="button" value="Enviar" class="btn btn-success btn-lg">
<hr>
<div id="comentarios">
{% for i in comentarios%}
<div style="background-color: red; width: 30px; height: 30px; border-radius: 15px; display: inline-block;"></div>
<h5 style="display: inline;">{{i.usuario}}</h5>
<p style="margin-left: 50px;">{{i.comentario}}</p>
<hr>
{% endfor %}
</div>
</div>
<script src="<https://code.jquery.com/jquery-3.4.1.js>"></script>
<script>
function envia_comentario(){
comentario = document.getElementById('comentario').value
document.getElementById('comentario').value = ""
$.ajax({
url: "{% url 'comentarios'%}",
method: 'post',
data: {
'csrfmiddlewaretoken': '{{ csrf_token }}',
'aula_id': "{{aula.id}}",
'usuario_id': "{{usuario_id}}",
'comentario': comentario
},
success: function(resposta){
resposta = JSON.parse(resposta)
if(resposta['status'] == "1"){
div_comentario = document.getElementById('comentarios')
div_comentario.innerHTML = ""
for(i=0; i < resposta['comentarios'].length; i++){
console.log('teste')
div_comentario.innerHTML += '<div style="background-color: red; width: 30px; height: 30px; border-radius: 15px; display: inline-block;"></div>'
div_comentario.innerHTML += '<h5 style="display: inline;">'+ resposta['comentarios'][i][0] +'</h5>'
div_comentario.innerHTML += '<p style="margin-left: 50px;">' + resposta['comentarios'][i][1] + '</p>'
div_comentario.innerHTML += '<hr>'
}
}
}
})
}
</script>
{% endblock %}
Agora vamos desenvolver o sistema de avaliação da aula.
Crie a tabela NotaAulas no banco de dados.
class NotasAulas(models.Model):
choices = (
('p', 'Péssimo'),
('r', 'Ruim'),
('re', 'Regular'),
('b', 'bom'),
('o', 'Ótimo')
)
aula = models.ForeignKey(Aulas, on_delete=models.DO_NOTHING)
nota = models.CharField(max_length=50, choices=choices)
usuario = models.ForeignKey(Usuario, on_delete=models.DO_NOTHING)
Registre na área administrativa.
admin.site.register(NotasAulas)
Crie a seguinte URL.
path('processa_avaliacao/', views.processa_avaliacao, name = 'processa_avaliacao')
Não se esqueça da view.
def processa_avaliacao(request):
if request.session.get('usuario'):
avaliacao = request.POST.get('avaliacao')
aula_id = request.POST.get('aula_id')
usuario_id = request.session.get('usuario')
usuario_avaliou = NotasAulas.objects.filter(aula_id = aula_id).filter(usuario_id = usuario_id)
if not usuario_avaliou:
nota_aulas = NotasAulas(aula_id = aula_id,
nota = avaliacao,
usuario_id = usuario_id,
)
nota_aulas.save()
return redirect(f'/home/aula/{aula_id}')
else:
return redirect('/auth/login/')
else:
return redirect('/auth/login/')