From 88ad66de736c8c9a4e88c8209693cf5f53c74720 Mon Sep 17 00:00:00 2001 From: Peter Date: Sun, 3 May 2020 18:53:54 +0000 Subject: [PATCH] Post app & Settings --- .gitignore | 6 +- fet2020/fet2020/middleware.py | 15 +++++ fet2020/fet2020/settings.py | 31 ++++++++-- fet2020/fet2020/urls.py | 14 +++-- fet2020/fet2020/views.py | 14 +++++ fet2020/posts/admin.py | 9 ++- fet2020/posts/forms.py | 14 +++++ fet2020/posts/models.py | 67 ++++++++++++++++++++++ fet2020/posts/templatetags/__init__.py | 0 fet2020/posts/templatetags/post_helpers.py | 13 +++++ fet2020/posts/urls.py | 7 +++ fet2020/posts/views.py | 17 ++++++ fet2020/requirements.txt | 4 ++ 13 files changed, 200 insertions(+), 11 deletions(-) create mode 100644 fet2020/fet2020/middleware.py create mode 100644 fet2020/fet2020/views.py create mode 100644 fet2020/posts/forms.py create mode 100644 fet2020/posts/templatetags/__init__.py create mode 100644 fet2020/posts/templatetags/post_helpers.py create mode 100644 fet2020/posts/urls.py create mode 100644 fet2020/requirements.txt 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