From 02512c1677b3553edd4b05d4e3d95004186ddc64 Mon Sep 17 00:00:00 2001 From: reverend Date: Sun, 18 Dec 2022 09:21:57 +0100 Subject: [PATCH 1/5] #3 Dependencies for Images --- Pipfile | 2 ++ 1 file changed, 2 insertions(+) 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] From 5342e62bcb0991eae74fc4d3e3f664ca02d3b7fc Mon Sep 17 00:00:00 2001 From: reverend Date: Sun, 18 Dec 2022 09:22:44 +0100 Subject: [PATCH 2/5] #3 Setting up Media and Static root --- .gitignore | 1 + django_web_galleries/django_web_galleries/settings.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 .gitignore 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/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 From 4deeb3d773f5eafadeb969e9e5eb52f36dfd8869 Mon Sep 17 00:00:00 2001 From: reverend Date: Sun, 18 Dec 2022 09:23:06 +0100 Subject: [PATCH 3/5] #3 Upload form for Images --- django_web_galleries/web_galleries/forms.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 django_web_galleries/web_galleries/forms.py 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'] From 17647bf4b73546bfec6f1650b2a0ad64a56bed55 Mon Sep 17 00:00:00 2001 From: reverend Date: Sun, 18 Dec 2022 09:23:36 +0100 Subject: [PATCH 4/5] #3 Setting up Views for Uploading and listing images --- .../django_web_galleries/urls.py | 3 +- .../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 ++++++++++++++++++- 6 files changed, 143 insertions(+), 3 deletions(-) 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/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/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) From 4c5a5fee8dce1868614989da91d7ee736f844f40 Mon Sep 17 00:00:00 2001 From: reverend Date: Sun, 18 Dec 2022 09:24:15 +0100 Subject: [PATCH 5/5] #3 Displaying Models on Admin page --- django_web_galleries/web_galleries/admin.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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)