From c5dfb4f926e3321a7f503e1584489fd59f68ca64 Mon Sep 17 00:00:00 2001 From: reverend Date: Sun, 18 Dec 2022 09:24:55 +0100 Subject: [PATCH] Squashed commit of the following: commit 4c5a5fee8dce1868614989da91d7ee736f844f40 Author: reverend Date: Sun Dec 18 09:24:15 2022 +0100 commit 17647bf4b73546bfec6f1650b2a0ad64a56bed55 Author: reverend Date: Sun Dec 18 09:23:36 2022 +0100 commit 4deeb3d773f5eafadeb969e9e5eb52f36dfd8869 Author: reverend Date: Sun Dec 18 09:23:06 2022 +0100 commit 5342e62bcb0991eae74fc4d3e3f664ca02d3b7fc Author: reverend Date: Sun Dec 18 09:22:44 2022 +0100 commit 02512c1677b3553edd4b05d4e3d95004186ddc64 Author: reverend Date: Sun Dec 18 09:21:57 2022 +0100 --- .gitignore | 1 + Pipfile | 2 + .../django_web_galleries/settings.py | 6 ++ .../django_web_galleries/urls.py | 3 +- django_web_galleries/web_galleries/admin.py | 10 +++- django_web_galleries/web_galleries/forms.py | 9 +++ .../web_galleries/templates/global.html | 46 +++++++++++++++ .../templates/list_images/image_list.html | 13 +++++ .../templates/upload_image/upload.html | 9 +++ django_web_galleries/web_galleries/urls.py | 19 +++++++ django_web_galleries/web_galleries/views.py | 56 ++++++++++++++++++- 11 files changed, 170 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 django_web_galleries/web_galleries/forms.py create mode 100644 django_web_galleries/web_galleries/templates/global.html create mode 100644 django_web_galleries/web_galleries/templates/list_images/image_list.html create mode 100644 django_web_galleries/web_galleries/templates/upload_image/upload.html create mode 100644 django_web_galleries/web_galleries/urls.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..30ecf62 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +django_web_galleries/media/* \ No newline at end of file diff --git a/Pipfile b/Pipfile index 26ee535..31c9bf3 100644 --- a/Pipfile +++ b/Pipfile @@ -5,6 +5,8 @@ name = "pypi" [packages] django = "*" +django-responsive-images = "*" +pillow = "*" [dev-packages] diff --git a/django_web_galleries/django_web_galleries/settings.py b/django_web_galleries/django_web_galleries/settings.py index c685ae2..212777d 100644 --- a/django_web_galleries/django_web_galleries/settings.py +++ b/django_web_galleries/django_web_galleries/settings.py @@ -37,6 +37,8 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'responsive_images', + 'web_galleries', ] MIDDLEWARE = [ @@ -115,9 +117,13 @@ USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/4.1/howto/static-files/ +STATIC_ROOT = BASE_DIR / 'static' STATIC_URL = 'static/' # Default primary key field type # https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +MEDIA_ROOT = BASE_DIR / 'media' +MEDIA_URL = 'media/' \ No newline at end of file diff --git a/django_web_galleries/django_web_galleries/urls.py b/django_web_galleries/django_web_galleries/urls.py index 244880e..3717e70 100644 --- a/django_web_galleries/django_web_galleries/urls.py +++ b/django_web_galleries/django_web_galleries/urls.py @@ -14,8 +14,9 @@ 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 urlpatterns = [ path('admin/', admin.site.urls), + path('', include('web_galleries.urls')) ] diff --git a/django_web_galleries/web_galleries/admin.py b/django_web_galleries/web_galleries/admin.py index 8c38f3f..dc7bb28 100644 --- a/django_web_galleries/web_galleries/admin.py +++ b/django_web_galleries/web_galleries/admin.py @@ -1,3 +1,11 @@ from django.contrib import admin -# Register your models here. +from .models import ( + Image, + Visitor, + Gallery +) + +admin.site.register(Image) +admin.site.register(Visitor) +admin.site.register(Gallery) diff --git a/django_web_galleries/web_galleries/forms.py b/django_web_galleries/web_galleries/forms.py new file mode 100644 index 0000000..96e6cee --- /dev/null +++ b/django_web_galleries/web_galleries/forms.py @@ -0,0 +1,9 @@ +from django import forms +from django.utils.translation import gettext as _ + +from .models import Image + +class ImageUploadForm(forms.ModelForm): + class Meta: + model = Image + fields = ['description', 'image_file', 'private'] diff --git a/django_web_galleries/web_galleries/templates/global.html b/django_web_galleries/web_galleries/templates/global.html new file mode 100644 index 0000000..cf9376c --- /dev/null +++ b/django_web_galleries/web_galleries/templates/global.html @@ -0,0 +1,46 @@ + + + + + + + Web Gallery + + +
+ + + +
+ {% block content %} + {% endblock content %} +
+
+ +
+
+ + \ No newline at end of file diff --git a/django_web_galleries/web_galleries/templates/list_images/image_list.html b/django_web_galleries/web_galleries/templates/list_images/image_list.html new file mode 100644 index 0000000..8df5b74 --- /dev/null +++ b/django_web_galleries/web_galleries/templates/list_images/image_list.html @@ -0,0 +1,13 @@ +{% extends '../global.html' %} + +{% load responsive_images %} + +{% block content %} + +
  • + {% for image in images %} + + {% endfor %} +
  • +
    +{% endblock content %} \ No newline at end of file diff --git a/django_web_galleries/web_galleries/templates/upload_image/upload.html b/django_web_galleries/web_galleries/templates/upload_image/upload.html new file mode 100644 index 0000000..494a6ce --- /dev/null +++ b/django_web_galleries/web_galleries/templates/upload_image/upload.html @@ -0,0 +1,9 @@ +{% extends '../global.html' %} + +{% block content %} +
    + {% csrf_token %} + {{ form }} + +
    +{% endblock content %} diff --git a/django_web_galleries/web_galleries/urls.py b/django_web_galleries/web_galleries/urls.py new file mode 100644 index 0000000..0ebc763 --- /dev/null +++ b/django_web_galleries/web_galleries/urls.py @@ -0,0 +1,19 @@ +from django.urls import path +from django.conf import settings +from django.conf.urls.static import static + +from .views import ( + ImageUploadView, + PublicImageListView +) + +urlpatterns = [ + path('', PublicImageListView.as_view(), name='home'), + path('upload/', ImageUploadView.as_view(), name='upload_image') +] + +if settings.DEBUG: + urlpatterns += static( + settings.MEDIA_URL, + document_root=settings.MEDIA_ROOT + ) \ No newline at end of file diff --git a/django_web_galleries/web_galleries/views.py b/django_web_galleries/web_galleries/views.py index 91ea44a..7ebce7c 100644 --- a/django_web_galleries/web_galleries/views.py +++ b/django_web_galleries/web_galleries/views.py @@ -1,3 +1,55 @@ -from django.shortcuts import render +import secrets -# Create your views here. +from django.views import View +from django.views.generic.list import ListView +from django.shortcuts import render, redirect +from django.urls import reverse + +from .forms import ImageUploadForm +from .models import Image + +class ImageUploadView(View): + def get(self, request): + form = ImageUploadForm() + return render( + request, + 'upload_image/upload.html', + { + 'form': form + } + ) + + def post(self, request): + form = ImageUploadForm( + request.POST, + request.FILES + ) + + if form.is_valid(): + image = form.save(commit=False) + + if image.private: + image.access_code = secrets.token_hex(32) + + image.save() + return redirect( + reverse('home') + ) + else: + form = ImageUploadForm() + return render( + request, + 'upload_image/upload.html', + { + 'form': form + } + ) + +class PublicImageListView(ListView): + model = Image + paginate_by = 20 + context_object_name = 'images' + template_name = 'list_images/image_list.html' + + def get_queryset(self): + return Image.objects.all().filter(private=False)