Add max image upload size limit
Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -3,6 +3,7 @@ from pathlib import Path
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import signals
|
from django.db.models import signals
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@@ -22,10 +23,7 @@ def image_upload(instance, filename):
|
|||||||
if ext not in (".jpg", ".png", ".gif"):
|
if ext not in (".jpg", ".png", ".gif"):
|
||||||
raise Exception("File type invalid")
|
raise Exception("File type invalid")
|
||||||
|
|
||||||
if instance.op:
|
return f"{instance.board.url}/{now_sec}{ext}"
|
||||||
return f"{instance.board.url}/{instance.op.id}/{now_sec}{ext}"
|
|
||||||
else:
|
|
||||||
return f"{instance.board.url}/{now_sec}{ext}"
|
|
||||||
|
|
||||||
|
|
||||||
def thumbs_upload(instance, filename):
|
def thumbs_upload(instance, filename):
|
||||||
@@ -33,10 +31,7 @@ def thumbs_upload(instance, filename):
|
|||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
now_sec = now.strftime("%s.%f")
|
now_sec = now.strftime("%s.%f")
|
||||||
ext = Path(filename).suffix.lower()
|
ext = Path(filename).suffix.lower()
|
||||||
if instance.op:
|
return f"{instance.board.url}/{now_sec}t{ext}"
|
||||||
return f"{instance.board.url}/{instance.op.id}/{now_sec}{ext}"
|
|
||||||
else:
|
|
||||||
return f"{instance.board.url}/{now_sec}t{ext}"
|
|
||||||
|
|
||||||
|
|
||||||
class Board(models.Model):
|
class Board(models.Model):
|
||||||
@@ -91,7 +86,7 @@ class Post(models.Model):
|
|||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if self.image:
|
if self.image:
|
||||||
self.original_image_name = self.image.name
|
self.original_image_name = Path(self.image.name).parts[-1]
|
||||||
self.__make_thumbnail()
|
self.__make_thumbnail()
|
||||||
super(Post, self).save(*args, **kwargs)
|
super(Post, self).save(*args, **kwargs)
|
||||||
|
|
||||||
@@ -134,6 +129,13 @@ class Post(models.Model):
|
|||||||
+ f"#p{self.id}"
|
+ f"#p{self.id}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
if self.image and self.image.size > settings.MAX_UPLOAD_SIZE:
|
||||||
|
raise ValidationError(
|
||||||
|
"Image supplied is too large. Maximum image size is %(max)s",
|
||||||
|
params={"max": settings.MAX_UPLOAD_SIZE},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@receiver(signals.post_save, sender=Post)
|
@receiver(signals.post_save, sender=Post)
|
||||||
def post_created(sender, instance, created, **kwargs):
|
def post_created(sender, instance, created, **kwargs):
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ hr {
|
|||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Create thread/post form */
|
||||||
|
.post_form_image_specs {
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
/* Posts */
|
/* Posts */
|
||||||
/*.post_body { }*/
|
/*.post_body { }*/
|
||||||
.post_image_info {
|
.post_image_info {
|
||||||
@@ -26,14 +31,11 @@ hr {
|
|||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Not sure if I like the in-line style or each post gets its own row style
|
|
||||||
.post_content:after {
|
.post_content:after {
|
||||||
content: "";
|
content: "";
|
||||||
display: table;
|
display: table;
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
.post_id {
|
.post_id {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{% extends "board/base.html" %}
|
{% extends "board/base.html" %}
|
||||||
|
{% load post_body %}
|
||||||
|
|
||||||
{% block title %}
|
{% block title %}
|
||||||
{% with title=board.url %}
|
{% with title=board.url %}
|
||||||
@@ -28,6 +29,7 @@
|
|||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<table>
|
<table>
|
||||||
{{ form.as_table }}
|
{{ form.as_table }}
|
||||||
|
<tr><td> </td><td>Max image size: {{ max_upload_size|measure_bytes }}</td></tr>
|
||||||
<tr><td> </td><td><input type="submit" value="Submit" /></td></tr>
|
<tr><td> </td><td><input type="submit" value="Submit" /></td></tr>
|
||||||
</table>
|
</table>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{% extends "board/base.html" %}
|
{% extends "board/base.html" %}
|
||||||
|
{% load post_body %}
|
||||||
|
|
||||||
{% block title %}
|
{% block title %}
|
||||||
{% with title=board.url %}
|
{% with title=board.url %}
|
||||||
@@ -24,6 +25,7 @@
|
|||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<table>
|
<table>
|
||||||
{{ form.as_table }}
|
{{ form.as_table }}
|
||||||
|
<tr><td> </td><td><span class="post_form_image_specs">Max image size: {{ max_upload_size|measure_bytes }}</span></td></tr>
|
||||||
<tr><td> </td><td><input type="submit" value="Submit" /></td></tr>
|
<tr><td> </td><td><input type="submit" value="Submit" /></td></tr>
|
||||||
</table>
|
</table>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from django.conf import settings
|
||||||
from django.http import Http404, HttpResponseRedirect
|
from django.http import Http404, HttpResponseRedirect
|
||||||
from django.shortcuts import render, get_object_or_404
|
from django.shortcuts import render, get_object_or_404
|
||||||
from django.views.generic import DetailView
|
from django.views.generic import DetailView
|
||||||
@@ -46,6 +47,7 @@ class BoardView(CreateView):
|
|||||||
end = start + PER_PAGE
|
end = start + PER_PAGE
|
||||||
kwargs["threads"] = board.threads.order_by("-last_bump")[start:end]
|
kwargs["threads"] = board.threads.order_by("-last_bump")[start:end]
|
||||||
kwargs["page"] = page
|
kwargs["page"] = page
|
||||||
|
kwargs["max_upload_size"] = settings.MAX_UPLOAD_SIZE
|
||||||
|
|
||||||
return super(BoardView, self).get_context_data(**kwargs)
|
return super(BoardView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
@@ -73,11 +75,14 @@ class PostView(CreateView):
|
|||||||
kwargs["board"] = get_object_or_404(Board, url=board_url)
|
kwargs["board"] = get_object_or_404(Board, url=board_url)
|
||||||
post_id = self.kwargs["id"]
|
post_id = self.kwargs["id"]
|
||||||
kwargs["post"] = get_object_or_404(Post, id=post_id)
|
kwargs["post"] = get_object_or_404(Post, id=post_id)
|
||||||
|
kwargs["max_upload_size"] = settings.MAX_UPLOAD_SIZE
|
||||||
|
|
||||||
return super(PostView, self).get_context_data(**kwargs)
|
return super(PostView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
board_url = self.kwargs["url"]
|
board_url = self.kwargs["url"]
|
||||||
board = get_object_or_404(Board, url=board_url)
|
board = get_object_or_404(Board, url=board_url)
|
||||||
|
|
||||||
post_id = self.kwargs["id"]
|
post_id = self.kwargs["id"]
|
||||||
post = get_object_or_404(Post, id=post_id)
|
post = get_object_or_404(Post, id=post_id)
|
||||||
|
|
||||||
|
|||||||
@@ -132,3 +132,5 @@ MEDIA_ROOT = "media/"
|
|||||||
MEDIA_URL = "media/"
|
MEDIA_URL = "media/"
|
||||||
|
|
||||||
THUMB_SIZE = (200, 200)
|
THUMB_SIZE = (200, 200)
|
||||||
|
|
||||||
|
MAX_UPLOAD_SIZE = 25 * 1024**2
|
||||||
|
|||||||
Reference in New Issue
Block a user