@@ -0,0 +1,17 @@ | |||
from channels.routing import ProtocolTypeRouter, URLRouter | |||
from django.urls import re_path | |||
from channels.routing import URLRouter | |||
from channels.http import AsgiHandler | |||
from channels.auth import AuthMiddlewareStack | |||
import django_eventstream | |||
urlpatterns = [ | |||
re_path(r'^events/', | |||
AuthMiddlewareStack(URLRouter(django_eventstream.routing.urlpatterns)), | |||
{'channels': ['notice']}), | |||
re_path(r'', AsgiHandler), | |||
] | |||
application = ProtocolTypeRouter({ | |||
'http': URLRouter(urlpatterns), | |||
}) |
@@ -39,6 +39,8 @@ INSTALLED_APPS = [ | |||
'django.contrib.sessions', | |||
'django.contrib.messages', | |||
'django.contrib.staticfiles', | |||
'channels', | |||
'django_eventstream', | |||
] | |||
MIDDLEWARE = [ | |||
@@ -49,6 +51,8 @@ MIDDLEWARE = [ | |||
'django.contrib.auth.middleware.AuthenticationMiddleware', | |||
'django.contrib.messages.middleware.MessageMiddleware', | |||
'django.middleware.clickjacking.XFrameOptionsMiddleware', | |||
'django_grip.GripMiddleware', | |||
'django.middleware.security.SecurityMiddleware', | |||
] | |||
ROOT_URLCONF = 'news.urls' | |||
@@ -72,6 +76,7 @@ TEMPLATES = [ | |||
] | |||
WSGI_APPLICATION = 'news.wsgi.application' | |||
ASGI_APPLICATION = 'news.routing.application' | |||
# Database |
@@ -10,4 +10,20 @@ class NoticeForm(forms.Form): | |||
initial=datetime.date.today) | |||
end = forms.DateField(label='Bis', | |||
input_formats=date_formats, | |||
initial=datetime.date.today) | |||
initial=datetime.datetime.today() + datetime.timedelta(days=1)) | |||
class EditNoticeForm(forms.Form): | |||
def __init__(self, *args, **kwargs): | |||
self.title = forms.CharField(label='Titel', | |||
max_length=80, | |||
initial=kwargs.pop('notice_title')) | |||
self.text = forms.CharField(label='Text', | |||
max_length=400, | |||
initial=kwargs.pop('notice_text')) | |||
self.start = forms.DateField(label='Von', | |||
initial=kwargs.pop('notice.pub_start'), | |||
input_formats=NoticeForm.date_formats) | |||
self.end = forms.DateField(label='Bis', | |||
initial=kwargs.pop('pub_end'), | |||
input_formats=NoticeForm.date_formats) | |||
super(EditNoticeForm, self).__init__(*args, **kwargs) |
@@ -5,6 +5,7 @@ urlpatterns = [ | |||
path('', views.index, name='posts'), | |||
path('new', views.new, name='new'), | |||
path('delete/<int:deleteId>', views.delete, name='delete'), | |||
path('edit/<int:editId>', views.edit, name='edit'), | |||
path('notices/', views.notice_list), | |||
path('notices/<int:id>/', views.notice_detail), |
@@ -5,12 +5,13 @@ from django.http import HttpResponse, JsonResponse | |||
from django.utils import timezone | |||
from django.contrib import messages | |||
from django.views.decorators.csrf import csrf_exempt | |||
from django_eventstream import send_event | |||
from rest_framework.renderers import JSONRenderer | |||
from rest_framework.parsers import JSONParser | |||
from .models import Notice | |||
from .forms import NoticeForm | |||
from .forms import NoticeForm, EditNoticeForm | |||
from .serializers import NoticeSerializer | |||
logger = None | |||
@@ -35,6 +36,7 @@ def index(request): | |||
} | |||
return render(request, 'posts/index.html', context) | |||
#@login_required | |||
def new(request): | |||
if request.method == "POST": | |||
form = NoticeForm(request.POST) | |||
@@ -44,6 +46,7 @@ def new(request): | |||
pub_start=form.cleaned_data['start'], | |||
pub_end=form.cleaned_data['end']) | |||
newNotice.save() | |||
send_event('notice', 'message', newNotice.id) | |||
return redirect('posts') | |||
context = {'form' : NoticeForm()} | |||
@@ -58,9 +61,38 @@ def delete(request, deleteId=None): | |||
if delNotice: | |||
delNotice.delete() | |||
message = "Notice has been deleted." | |||
send_event('notice', 'message', "Notice has been deleted.") | |||
return redirect('posts') | |||
def edit(request, editId=None): | |||
init_loger(__name__) | |||
logger.debug(editId) | |||
logger.debug(request.method) | |||
editNotice = None | |||
if editId: | |||
editNotice = Notice.objects.get(id=editId) | |||
logger.debug(editNotice) | |||
if editNotice: | |||
form = EditNoticeForm(editNotice) | |||
#form.title = editNotice.notice_title | |||
#form.notice_to_form(editNotice) | |||
logger.info(form) | |||
#if form.is_valid(): | |||
# return HttpResponse(status=204) | |||
context = {'form' : form} | |||
return render(request, 'posts/edit.html', context) | |||
""" | |||
newNotice = Notice(notice_title=form.cleaned_data['title'], | |||
notice_text=form.cleaned_data['text'], | |||
pub_start=form.cleaned_data['start'], | |||
pub_end=form.cleaned_data['end']) | |||
newNotice.save() | |||
send_event('notice', 'message', newNotice.id) | |||
return redirect('posts') | |||
""" | |||
@csrf_exempt | |||
def notice_list(request): | |||
if request.method == 'GET': | |||
@@ -98,4 +130,4 @@ def notice_detail(request, id): | |||
elif request.method == 'DELETE': | |||
notice.delete() | |||
return HttpResponse(status=204) | |||
return HttpResponse(status=204) |
@@ -7,6 +7,11 @@ | |||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> | |||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> | |||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> | |||
{% load static %} | |||
<script src="{% static 'django_eventstream/eventsource.min.js' %}"></script> | |||
<script src="{% static 'django_eventstream/reconnecting-eventsource.js' %}"></script> | |||
</head> | |||
<body> | |||
{% include 'navbar.html' %} |
@@ -5,6 +5,12 @@ Index | |||
{% endblock %} | |||
{% block content %} | |||
<script> | |||
var es = new ReconnectingEventSource('/events/'); | |||
es.addEventListener('message', function (e) {console.log(e.data); location.reload();}); | |||
</script> | |||
<div class=container> | |||
<h1 class="display-4">Your Posts</h1> | |||
@@ -13,7 +19,10 @@ Index | |||
<div class="jumbotron"> | |||
<h3>{{ notice.notice_title }}</h3> | |||
<p>{{ notice.notice_text }}</p> | |||
<p><a href="{% url 'delete' deleteId=notice.id %}" class="btn btn-danger" role="button">Delete</a></p> | |||
<p> | |||
<a href="{% url 'delete' deleteId=notice.id %}" class="btn btn-danger" role="button">Delete</a> | |||
<a href="{% url 'edit' editId=notice.id %}" class="btn btn-info" role="button">Edit</a> | |||
</p> | |||
{% if message %} | |||
<script> | |||
alert('{{ message }}'); |