def send_message(request): """ Save message in database. And redirect to chat room. If chat not exists - create new chat room. :param request: HttRequest as POST :return: If not errors and request POST return redirect to chat room page. Else return error page. """ if request.method == 'POST': receiver = User.objects.get(username=request.POST['receiver']) sender = User.objects.get(username=request.POST['sender']) chats = Chat.objects.filter(users=receiver).filter(users=request.user) chat = None new_message = Messages() if chats.exists(): # If chat exist get first chat room for current user and receiver chat = chats[0] old_messages = Messages.objects.filter(chat=chat).filter(new=True) set_new_messages_to_old(old_messages) else: chat = Chat.objects.create() chat.users.add(sender, receiver) new_message.chat = chat new_message.sender = sender new_message.text = request.POST['text'] new_message.new = True new_message.save() chat.have_new_message = True chat.save() return redirect('/messages/chat/' + str(chat.id) +'/') else: return render_to_response('error.html', {'error': REQUEST_TYPE_ERROR}, context_instance=RequestContext(request))
def send_message_api(request): """ API endpoint for tornado application (chatapp.py). Save message in database and return message object as JSON. :param request: HttpRequest from tornado app. Should have chat (chat.id), text (message text), sender (sender username) parameters :return: Return Message object as JSON. """ if request.method == "POST": if request.POST['API_KEY'] == API_KEY: chat = Chat.objects.get(id=request.POST['chat']) text = request.POST['text'] sender = User.objects.get(username=request.POST['sender']) if sender not in chat.users.all(): return HttpResponse(json.dumps({'chat': chat.pk, 'Error': 'incorrect chat user'})) messages = Messages.objects.filter(chat=chat).filter(new=True) set_new_messages_to_old(messages) new_message = Messages() new_message.sender = sender new_message.chat = chat new_message.text = text new_message.new = True new_message.save() chat.have_new_message = True chat.save() return HttpResponse(json.dumps({ 'sender': sender.username, 'text': text, 'chat': chat.id, 'datetime': new_message.datetime.strftime('%d-%m-%Y %H:%M') }), content_type="application/json")
def show_chat(request, id): """ Show main chat window. :param request: HttpRequest :param id: chat id :return: HttpResponse (messages, receiver and chat objects) """ try: chat = Chat.objects.get(id=id) chat.have_new_message = False chat.save() except (Chat.DoesNotExist, Chat.MultipleObjectsReturned): error = CHAT_ID_ERROR return render_to_response('error.html', {'error': error}, context_instance=RequestContext(request)) for user in chat.users.all(): if user != request.user: receiver = user messages = Messages.objects.filter(chat=chat).order_by('datetime') new_messages = messages.filter(new=True) set_new_messages_to_old(new_messages) return render_to_response('chat.html', {'messages': messages, 'receiver': receiver, 'chat': chat, 'object': request.user}, context_instance=RequestContext(request))