Advertisement
horozov86

Chat

Jun 20th, 2025
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.00 KB | None | 0 0
  1. 1. Модел за съобщения
  2. python
  3. Copy
  4. Edit
  5. # models.py
  6. from django.db import models
  7. from django.contrib.auth.models import User
  8.  
  9. class ChatMessage(models.Model):
  10.     sender = models.ForeignKey(User, on_delete=models.CASCADE)
  11.     message = models.TextField()
  12.     created_at = models.DateTimeField(auto_now_add=True)
  13.  
  14.     class Meta:
  15.         ordering = ['-created_at']
  16. 🧩 2. URLs
  17. python
  18. Copy
  19. Edit
  20. # urls.py
  21. from django.urls import path
  22. from . import views
  23.  
  24. urlpatterns = [
  25.     path('chat/send/', views.send_message, name='send_message'),
  26.     path('chat/messages/', views.get_messages, name='get_messages'),
  27. ]
  28. 🧠 3. Views (обработващи AJAX)
  29. python
  30. Copy
  31. Edit
  32. # views.py
  33. from django.http import JsonResponse
  34. from django.contrib.auth.decorators import login_required
  35. from .models import ChatMessage
  36.  
  37. @login_required
  38. def send_message(request):
  39.     if request.method == 'POST':
  40.         msg = request.POST.get('message')
  41.         if msg:
  42.             ChatMessage.objects.create(sender=request.user, message=msg)
  43.         return JsonResponse({'status': 'ok'})
  44.  
  45. @login_required
  46. def get_messages(request):
  47.     messages = ChatMessage.objects.all().order_by('-created_at')[:20]
  48.     data = [
  49.         {'sender': m.sender.username, 'message': m.message, 'time': m.created_at.strftime('%H:%M:%S')}
  50.         for m in reversed(messages)
  51.     ]
  52.     return JsonResponse(data, safe=False)
  53. 💬 4. HTML + JavaScript (в base.html или footer.html)
  54. html
  55. Copy
  56. Edit
  57. <div id="simple-chat" style="position:fixed;bottom:0;right:20px;width:300px;background:#eee;padding:10px;border:1px solid #ccc;">
  58.   <div id="chat-messages" style="height:200px;overflow-y:auto;background:#fff;padding:5px;border:1px solid #aaa;"></div>
  59.   <form id="chat-form">
  60.     <input type="text" id="chat-input" placeholder="Напиши съобщение..." style="width:70%">
  61.     <button type="submit">Изпрати</button>
  62.   </form>
  63. </div>
  64.  
  65. <script>
  66. function loadMessages() {
  67.   fetch('/chat/messages/')
  68.     .then(res => res.json())
  69.     .then(data => {
  70.       const box = document.getElementById('chat-messages');
  71.       box.innerHTML = '';
  72.       data.forEach(msg => {
  73.         box.innerHTML += `<p><strong>${msg.sender}</strong>: ${msg.message}</p>`;
  74.       });
  75.       box.scrollTop = box.scrollHeight;
  76.     });
  77. }
  78.  
  79. document.getElementById('chat-form').addEventListener('submit', function(e) {
  80.   e.preventDefault();
  81.   const input = document.getElementById('chat-input');
  82.   const message = input.value;
  83.   if (message.trim() === '') return;
  84.  
  85.   fetch('/chat/send/', {
  86.     method: 'POST',
  87.     headers: {
  88.       'Content-Type': 'application/x-www-form-urlencoded',
  89.       'X-CSRFToken': '{{ csrf_token }}'
  90.     },
  91.     body: 'message=' + encodeURIComponent(message)
  92.   }).then(() => {
  93.     input.value = '';
  94.     loadMessages();
  95.   });
  96. });
  97.  
  98. setInterval(loadMessages, 5000); // Обновява съобщенията на всеки 5 секунди
  99. loadMessages(); // Зарежда при отваряне
  100. </script>
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement