Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1. Модел за съобщения
- python
- Copy
- Edit
- # models.py
- from django.db import models
- from django.contrib.auth.models import User
- class ChatMessage(models.Model):
- sender = models.ForeignKey(User, on_delete=models.CASCADE)
- message = models.TextField()
- created_at = models.DateTimeField(auto_now_add=True)
- class Meta:
- ordering = ['-created_at']
- 🧩 2. URLs
- python
- Copy
- Edit
- # urls.py
- from django.urls import path
- from . import views
- urlpatterns = [
- path('chat/send/', views.send_message, name='send_message'),
- path('chat/messages/', views.get_messages, name='get_messages'),
- ]
- 🧠 3. Views (обработващи AJAX)
- python
- Copy
- Edit
- # views.py
- from django.http import JsonResponse
- from django.contrib.auth.decorators import login_required
- from .models import ChatMessage
- @login_required
- def send_message(request):
- if request.method == 'POST':
- msg = request.POST.get('message')
- if msg:
- ChatMessage.objects.create(sender=request.user, message=msg)
- return JsonResponse({'status': 'ok'})
- @login_required
- def get_messages(request):
- messages = ChatMessage.objects.all().order_by('-created_at')[:20]
- data = [
- {'sender': m.sender.username, 'message': m.message, 'time': m.created_at.strftime('%H:%M:%S')}
- for m in reversed(messages)
- ]
- return JsonResponse(data, safe=False)
- 💬 4. HTML + JavaScript (в base.html или footer.html)
- html
- Copy
- Edit
- <div id="simple-chat" style="position:fixed;bottom:0;right:20px;width:300px;background:#eee;padding:10px;border:1px solid #ccc;">
- <div id="chat-messages" style="height:200px;overflow-y:auto;background:#fff;padding:5px;border:1px solid #aaa;"></div>
- <form id="chat-form">
- <input type="text" id="chat-input" placeholder="Напиши съобщение..." style="width:70%">
- <button type="submit">Изпрати</button>
- </form>
- </div>
- <script>
- function loadMessages() {
- fetch('/chat/messages/')
- .then(res => res.json())
- .then(data => {
- const box = document.getElementById('chat-messages');
- box.innerHTML = '';
- data.forEach(msg => {
- box.innerHTML += `<p><strong>${msg.sender}</strong>: ${msg.message}</p>`;
- });
- box.scrollTop = box.scrollHeight;
- });
- }
- document.getElementById('chat-form').addEventListener('submit', function(e) {
- e.preventDefault();
- const input = document.getElementById('chat-input');
- const message = input.value;
- if (message.trim() === '') return;
- fetch('/chat/send/', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- 'X-CSRFToken': '{{ csrf_token }}'
- },
- body: 'message=' + encodeURIComponent(message)
- }).then(() => {
- input.value = '';
- loadMessages();
- });
- });
- setInterval(loadMessages, 5000); // Обновява съобщенията на всеки 5 секунди
- loadMessages(); // Зарежда при отваряне
- </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement