diff --git a/.gitignore b/.gitignore
index 4dcc96f8..554de196 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,6 @@
.env/*
-*.pyc
\ No newline at end of file
+*.pyc
+*_design1
+fet2020/files/*
+*.sqlite3
+fet2020/posts/migrations/*
\ No newline at end of file
diff --git a/fet2020/fet2020/middleware.py b/fet2020/fet2020/middleware.py
new file mode 100644
index 00000000..0a0eb6d6
--- /dev/null
+++ b/fet2020/fet2020/middleware.py
@@ -0,0 +1,15 @@
+from django.contrib.auth.models import User
+from django.contrib.auth.middleware import RemoteUserMiddleware
+import django
+#import logging
+#logger=logging.getLogger("django.request")
+
+class FETHeaderMiddleware(RemoteUserMiddleware):
+ header="Remote-User"
+ def process_request(self, request):
+ request.META[self.header]=request.META.get(self.header, request.headers.get(self.header,None))
+ super().process_request(request)
+ if request.user.is_authenticated:
+ request.user.is_admin=True
+ request.user.is_superuser=True
+ request.user.is_staff=True
\ No newline at end of file
diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py
index 155cb65c..7a95a694 100644
--- a/fet2020/fet2020/settings.py
+++ b/fet2020/fet2020/settings.py
@@ -27,16 +27,21 @@ DEBUG = True
ALLOWED_HOSTS = []
-
+DATA_UPLOAD_MAX_MEMORY_SIZE = 1024*1024*1024
# Application definition
+CKEDITOR_UPLOAD_PATH = 'upload'
INSTALLED_APPS = [
+ 'posts.apps.PostsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
+ 'taggit',
+ 'ckeditor',
+ 'ckeditor_uploader'
]
MIDDLEWARE = [
@@ -45,6 +50,7 @@ MIDDLEWARE = [
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'fet2020.middleware.FETHeaderMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
@@ -54,7 +60,7 @@ ROOT_URLCONF = 'fet2020.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [],
+ 'DIRS': ['templates_design1'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
@@ -80,6 +86,9 @@ DATABASES = {
}
}
+AUTHENTICATION_BACKENDS = [
+ 'django.contrib.auth.backends.RemoteUserBackend'
+]
# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators
@@ -103,9 +112,9 @@ AUTH_PASSWORD_VALIDATORS = [
# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/
-LANGUAGE_CODE = 'en-us'
+LANGUAGE_CODE = 'de-at'
-TIME_ZONE = 'UTC'
+TIME_ZONE = 'CET'
USE_I18N = True
@@ -117,4 +126,16 @@ USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
-STATIC_URL = '/static/'
+STATIC_URL = '/assets/'
+
+STATICFILES_DIRS = [
+ os.path.join(BASE_DIR, "static"),
+ os.path.join(BASE_DIR, "static_design1"),
+]
+
+MEDIA_ROOT=os.path.join(BASE_DIR, 'files/')
+MEDIA_URL='/files/'
+
+
+
+TAGGIT_FORCE_LOWERCASE = True
\ No newline at end of file
diff --git a/fet2020/fet2020/urls.py b/fet2020/fet2020/urls.py
index 1144e165..bad41dfd 100644
--- a/fet2020/fet2020/urls.py
+++ b/fet2020/fet2020/urls.py
@@ -1,4 +1,4 @@
-"""fet2020 URL Configuration
+"""test1 URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.0/topics/http/urls/
@@ -14,8 +14,14 @@ Including another URLconf
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
-from django.urls import path
-
+from django.urls import path, include
+from django.conf.urls.static import static
+from django.conf import settings
+from . import views
urlpatterns = [
+ path('posts/',include('posts.urls')),
path('admin/', admin.site.urls),
-]
+ path('', views.index, name='home'),
+ path('index.html', views.index, name='home'),
+ path('ckeditor/', include('ckeditor_uploader.urls'))
+]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
diff --git a/fet2020/fet2020/views.py b/fet2020/fet2020/views.py
new file mode 100644
index 00000000..cb9b6527
--- /dev/null
+++ b/fet2020/fet2020/views.py
@@ -0,0 +1,14 @@
+from django.shortcuts import render
+from django.http import HttpResponse
+from collections import deque
+from posts.models import Post
+
+
+def index(request):
+ posts=deque(Post.objects.all())
+ l=len(posts)
+
+ if l>=1:
+ featured_post=posts.popleft()
+
+ return render(request, 'home.html',{'posts':posts, 'featured_post':featured_post})
diff --git a/fet2020/posts/admin.py b/fet2020/posts/admin.py
index 8c38f3f3..bd0b2727 100644
--- a/fet2020/posts/admin.py
+++ b/fet2020/posts/admin.py
@@ -1,3 +1,10 @@
from django.contrib import admin
-
+from .models import Post
# Register your models here.
+from .forms import MyPostForm
+
+class MyPostAdmin(admin.ModelAdmin):
+ form = MyPostForm
+ model = Post
+
+admin.site.register(Post,MyPostAdmin)
\ No newline at end of file
diff --git a/fet2020/posts/forms.py b/fet2020/posts/forms.py
new file mode 100644
index 00000000..f5d5eb91
--- /dev/null
+++ b/fet2020/posts/forms.py
@@ -0,0 +1,14 @@
+from django import forms
+from ckeditor_uploader.widgets import CKEditorUploadingWidget
+
+from .models import Post
+
+class MyPostForm(forms.ModelForm):
+ class Meta:
+ model = Post
+ fields = ['title','subtitle', 'image','body','slug','author']
+
+ widgets = {'body': CKEditorUploadingWidget(config_name='default')
+
+ }
+
diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py
index 71a83623..85a43ee3 100644
--- a/fet2020/posts/models.py
+++ b/fet2020/posts/models.py
@@ -1,3 +1,70 @@
from django.db import models
+from django.contrib.auth.models import User
+from taggit.managers import TaggableManager
+from django.utils.text import slugify
+#from ckeditor_uploader import RichTextUploadingField
+import django
+import uuid
+import re
# Create your models here.
+class Post(models.Model):
+ # id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
+ legacy_id=models.IntegerField(null=True)
+ legacy_rubrik_id=models.IntegerField(null=True)
+ title=models.CharField(max_length=200) # Titel des Posts
+ subtitle=models.CharField(max_length=500, null=True, blank=True) # subtitle
+ slug=models.SlugField(unique=True,null=True,blank=True) # Slug = Text Basierter url bestandteil zb Fetsitzung 22.1.2020 --> fetsitzung_22_1_2020 für Url
+ body=models.TextField(null=True, blank=True) # Body Text Artikel Text soll später mit WYSIWG Editor bearbeitet werden
+ image=models.ImageField(null=True,blank=True) # Ein Haupt Bild für den Post
+ author=models.ForeignKey(User,on_delete=models.SET_NULL, null=True) # Wer hat das geschrieben
+ tags=TaggableManager(blank=True) # Tags
+ public_date=models.DateField('date published',null=True,blank=True, default=django.utils.timezone.now) # Datum ab dem etwas öffentlich sein soll
+
+ imported_from = models.CharField(max_length=200, null=True, blank=True) # Titel des Posts
+
+ is_fetsitzung=models.BooleanField(default=False)
+ is_event=models.BooleanField(default=False)
+
+ # Zusatz Info wenn ein Event gepostet wird
+ event_start=models.DateTimeField('Event Start', null=True,blank=True)
+ event_end=models.DateTimeField('Event Ende', null=True,blank=True)
+ event_place=models.CharField(max_length=200, null=True,blank=True)
+
+ # Dokumente v.a. fuer Sitzungen
+ has_protocol = models.BooleanField(default=False)
+ has_agenda = models.BooleanField(default=False)#
+ protocol_key=models.CharField(max_length=200, null=True,blank=True)
+ agenda_key=models.CharField(max_length=200, null=True,blank=True)
+
+ # TimeStamps
+ date_modified=models.DateTimeField(auto_now=True)
+ date_created=models.DateTimeField(auto_now_add=True)
+
+
+ def get_tags(self):
+ return ",".join(self.tags.names())
+
+ def imageurl(self):
+ if self.image:
+ return self.image.url
+ else:
+ return ""
+
+ def key(self):
+ return self.slug or self.id
+
+ def save(self, *args, **kwargs):
+ if self.id is None and (self.slug is None or self.slug ==""):
+ self.slug=slugify(self.title)
+
+
+ super().save(*args, **kwargs)
+
+ self.tags.set(*re.findall(r'\#([\d\w]+)', str(self.subtitle)),*re.findall(r'\#([\d\w]+)', str(self.title)))
+
+
+
+
+
+
diff --git a/fet2020/posts/templatetags/__init__.py b/fet2020/posts/templatetags/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/fet2020/posts/templatetags/post_helpers.py b/fet2020/posts/templatetags/post_helpers.py
new file mode 100644
index 00000000..b1e24cca
--- /dev/null
+++ b/fet2020/posts/templatetags/post_helpers.py
@@ -0,0 +1,13 @@
+from django import template
+import re
+from django.template.defaultfilters import stringfilter
+from django.utils.safestring import mark_safe
+register = template.Library()
+
+
+
+@register.filter(is_safe=True)
+@stringfilter
+def tags_to_url(value):
+ #return "Tag to url: %s" % value
+ return mark_safe(re.sub(r'\#([\d\w]+)', '#\g<1>', value))
\ No newline at end of file
diff --git a/fet2020/posts/urls.py b/fet2020/posts/urls.py
new file mode 100644
index 00000000..e1e6e07f
--- /dev/null
+++ b/fet2020/posts/urls.py
@@ -0,0 +1,7 @@
+from django.urls import path
+from . import views
+urlpatterns=[
+ path('',views.index,name='posts.index'),
+ path('',views.show, name='posts.show'),
+
+]
\ No newline at end of file
diff --git a/fet2020/posts/views.py b/fet2020/posts/views.py
index 91ea44a2..d88dcd18 100644
--- a/fet2020/posts/views.py
+++ b/fet2020/posts/views.py
@@ -1,3 +1,20 @@
from django.shortcuts import render
+from django.http import HttpResponse
+from collections import deque
+
+from .models import Post
+from taggit.models import Tag
# Create your views here.
+def index(request):
+ posts=deque(Post.objects.all())
+ return render(request, 'posts/index.html', {"posts": posts})
+
+def show(request,id=None):
+ print("id: %s" % id)
+ print("is_digit:%s" % id.isdigit())
+ if id.isdigit() or id is int:
+ p=Post.objects.get(id=int(id))
+ elif id != ""and not id is None:
+ p=Post.objects.get(slug=(id))
+ return render(request, 'posts/show.html', {"post":p})
diff --git a/fet2020/requirements.txt b/fet2020/requirements.txt
new file mode 100644
index 00000000..0973516c
--- /dev/null
+++ b/fet2020/requirements.txt
@@ -0,0 +1,4 @@
+django
+django-taggit
+django-ckeditor
+Pillow
\ No newline at end of file