chat v2
This commit is contained in:
SDE
2023-08-09 14:06:43 +03:00
parent 73f791c8d9
commit e5d7116cad
8 changed files with 67 additions and 1 deletions

2
AuthApp/funcs.py Normal file
View File

@@ -0,0 +1,2 @@

29
AuthApp/middleware.py Normal file
View File

@@ -0,0 +1,29 @@
import json
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
class ResponseInterceptionMiddleware:
# def __init__(self, get_response):
# self.get_response = get_response
#
# def __call__(self, request):
# return self.get_response(request)
# def process_request(self, request):
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
if request.user.is_authenticated:
request = request.user.user_profile.save_user_alerts_to_session(request)
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response

View File

@@ -1,5 +1,8 @@
# coding=utf-8 # coding=utf-8
from __future__ import unicode_literals from __future__ import unicode_literals
import json
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@@ -48,6 +51,13 @@ class UserProfile(BaseModel):
on_delete=models.SET_NULL on_delete=models.SET_NULL
) )
def save_user_alerts_to_session(self, request):
for_save_to_session = self.pop_node_by_name('for_save_to_session')
if for_save_to_session:
for key, val in for_save_to_session.items():
request.session[key] = json.dumps(val)
return request
def __str__(self): def __str__(self):
if self.user: if self.user:

View File

@@ -34,6 +34,17 @@ class BaseModel(models.Model):
else: else:
return str(self.id) return str(self.id)
def pop_node_by_name(self, node_name):
if not self.json_data or not node_name in self.json_data:
return None
res = self.json_data[node_name]
del self.json_data[node_name]
self.save(update_fields=['json_data'])
return res
def get_node_by_name(self, node_name): def get_node_by_name(self, node_name):
if not self.json_data or not node_name in self.json_data: if not self.json_data or not node_name in self.json_data:
return None return None

View File

@@ -102,9 +102,12 @@ def update_chat_ajax(request):
}) })
html = render_to_string(tpl_name, res_Dict, request=request) html = render_to_string(tpl_name, res_Dict, request=request)
res_Dict.update({'receivers': get_chat_receivers_for_user(request.user)})
users_list_html = render_to_string('blocks/profile/b_list_of_users_messenger.html', res_Dict, request=request)
Dict.update({ Dict.update({
'html': html, 'html': html,
'users_list_html': users_list_html,
'required_beep': True, 'required_beep': True,
}) })
return JsonResponse(Dict, status=200) return JsonResponse(Dict, status=200)
@@ -185,6 +188,16 @@ def send_msg_ajax(request):
'text': data['text'] 'text': data['text']
}) })
session_data = {
'for_save_to_session':{
'user_alerts':{
'new_message': True
}
}
}
receiver.user_profile.add_node_to_json_data(session_data, save=True)
msg = Message.objects.create(**msg_create_kwargs) msg = Message.objects.create(**msg_create_kwargs)
if ticket: if ticket:

View File

@@ -60,6 +60,7 @@ MIDDLEWARE = [
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'AuthApp.middleware.ResponseInterceptionMiddleware',
] ]
ROOT_URLCONF = 'TWB.urls' ROOT_URLCONF = 'TWB.urls'

View File

@@ -3,6 +3,6 @@
<span class="title-list-of-users">Чаты:</span> <span class="title-list-of-users">Чаты:</span>
<div class="insert_users"> <div class="insert_users">
{% for item in receivers %} {% for item in receivers %}
{% include "widgets/w_chat_right_panel_users.html" %} {% include "widgets/w_chat_right_panel_user.html" %}
{% endfor %} {% endfor %}
</div> </div>