2017-05-08 2 views
-1

Ainsi que le titre le dit, im essayant d'exécuter deux vues en même temps. Ou du moins, c'est ce que je pense devoir faire. J'ai le système qui permet à l'utilisateur comme le modèle et si le modèle comme le compte est plus grand que 3, la vue devrait être redirigée vers une vue qui envoie un message électronique au client. Je ne veux pas mettre le code de message d'email dans la même vue que la vue "comme", comme le fonctionne comme le bouton comme sur Facebook: il doit répondre rapidement à l'utilisateur. Aussi je veux que la vue de like_exam soit finie dans tous les cas, si contre < 3 ou pas. SO ce que j'ai maintenant est:Django exécute deux vues en même temps

def like_exam(request, letnik_id, classes_id, subject_id): 
    exam_id = request.GET.get('exam') 
    exam = get_object_or_404(Exam, id=exam_id) 
    counter = exam.exam_likes.count() 
    user = request.user 
    if user in exam.exam_likes.all(): 
     exam.exam_likes.remove(user) 
     return JsonResponse({"like": "unliked"}) 
    else: 
     exam.exam_likes.add(user) 
     if counter < 3: 
      html = likes_email(exam) 
      return HttpResponse(html) 
     # i want the json to be posted in any case: 
     return JsonResponse({"like": "liked"}) 

def likes_email(exam): 
    ....sends email... 

Répondre

3

Il n'y a aucun moyen d'exécuter deux vues en même temps. Et ce n'est pas ce que vous voulez faire de toute façon, puisque la fonction "likes_email" ne renvoie pas de réponse à l'utilisateur, qui fait partie du contrat d'une vue. Le modèle pour exécuter des opérations qui prennent du temps consiste à les exporter vers un processus distinct, généralement avec une file d'attente de tâches. La meilleure façon de les gérer dans Django est d'utiliser Celery.