optimisation des images.

This commit is contained in:
Jonas Legion 2021-06-23 09:43:14 +02:00
parent 8c3a13f0ba
commit 938c8e3c0f
6 changed files with 46 additions and 24 deletions

View File

@ -29,6 +29,9 @@ class EventAdmin(admin.ModelAdmin):
'reservations', 'reservations',
'datetime', 'datetime',
) )
readonly_fields = (
'reservations',
)
staff_admin_site.register(Event, EventAdmin) staff_admin_site.register(Event, EventAdmin)

View File

@ -1,3 +1,12 @@
from django.db import models from django.db import models
# Create your models here. # Create your models here.
# from django.contrib.auth.models import AbstractUser
# class TibilletUser(AbstractUser):
# pass

View File

@ -21,6 +21,7 @@ class OptionGenerale(models.Model):
verbose_name = _('Options Generales') verbose_name = _('Options Generales')
verbose_name_plural = _('Options Generales') verbose_name_plural = _('Options Generales')
@receiver(post_save, sender=OptionGenerale) @receiver(post_save, sender=OptionGenerale)
def poids_option_generaler(sender, instance: OptionGenerale, created, **kwargs): def poids_option_generaler(sender, instance: OptionGenerale, created, **kwargs):
if created: if created:
@ -31,7 +32,6 @@ def poids_option_generaler(sender, instance: OptionGenerale, created, **kwargs):
instance.save() instance.save()
class Configuration(SingletonModel): class Configuration(SingletonModel):
organisation = models.CharField(max_length=50) organisation = models.CharField(max_length=50)
short_description = models.CharField(max_length=250) short_description = models.CharField(max_length=250)
@ -46,27 +46,30 @@ class Configuration(SingletonModel):
img = StdImageField(upload_to='images/', img = StdImageField(upload_to='images/',
null=True, blank=True, null=True, blank=True,
validators=[MaxSizeValidator(1920, 1920)], # validators=[MaxSizeValidator(1920, 1920)],
variations={ variations={
'thumbnail': (1200, 1200), 'fhd': (1920, 1920),
}, delete_orphans=True) 'hdr': (720, 720),
'med': (480, 480),
'thumbnail': (150, 90),
},
delete_orphans=True
)
mollie_api_key = models.CharField(max_length=50, mollie_api_key = models.CharField(max_length=50,
blank=True, null=True) blank=True, null=True)
reservation_par_user_max = models.PositiveSmallIntegerField(default=6) reservation_par_user_max = models.PositiveSmallIntegerField(default=6)
jauge_max = models.PositiveSmallIntegerField() jauge_max = models.PositiveSmallIntegerField(default=50)
option_generale_radio = models.ManyToManyField(OptionGenerale, option_generale_radio = models.ManyToManyField(OptionGenerale,
blank=True, blank=True,
related_name="radiobutton") related_name="radiobutton")
option_generale_checkbox = models.ManyToManyField(OptionGenerale, option_generale_checkbox = models.ManyToManyField(OptionGenerale,
blank=True, blank=True,
related_name="checkbox") related_name="checkbox")
class Event(models.Model): class Event(models.Model):
@ -79,8 +82,12 @@ class Event(models.Model):
null=True, blank=True, null=True, blank=True,
validators=[MaxSizeValidator(1920, 1920)], validators=[MaxSizeValidator(1920, 1920)],
variations={ variations={
'thumbnail': (500, 500), 'fhd': (1920, 1920),
}, delete_orphans=True) 'hdr': (1280, 1280),
'crop': (510, 310, True),
},
delete_orphans=True
)
reservations = models.PositiveSmallIntegerField(default=0) reservations = models.PositiveSmallIntegerField(default=0)
@ -97,7 +104,6 @@ class Event(models.Model):
verbose_name_plural = _('Evenements') verbose_name_plural = _('Evenements')
class reservation(models.Model): class reservation(models.Model):
event = models.ForeignKey(Event, event = models.ForeignKey(Event,
on_delete=models.CASCADE, on_delete=models.CASCADE,
@ -111,6 +117,6 @@ class reservation(models.Model):
(PAYEE, _('Payée')), (PAYEE, _('Payée')),
] ]
status = models.CharField(max_length=3, choices=TYPE_CHOICES, default=NON_VALIDEE, status = models.CharField(max_length=3, choices=TYPE_CHOICES, default=NON_VALIDEE,
verbose_name=_("Status de la réservation")) verbose_name=_("Status de la réservation"))
qty = models.IntegerField() qty = models.IntegerField()

View File

@ -39,12 +39,12 @@
<!-- Post --> <!-- Post -->
<section class="post"> <section class="post">
<header class="major"> <header class="major">
<span class="date">{{ event.datetime.date }}<br/>{{ event.datetime.time }}</span> <span class="date">{{ event.datetime | date:"d F Y"}}<br/>{{ event.datetime | time }}</span>
<h1>{{ event.name }}</h1> <h1>{{ event.name }}</h1>
<p>{{ event.short_description }}</p> <p>{{ event.short_description }}</p>
</header> </header>
<div class="image main"><img src="/media/{{ event.img }}" alt=""/></div> <div class="image main"><img src="/media/{{ event.img.fhd }}" alt=""/></div>
<p>{{ event.long_description }}</p> <p>{{ event.long_description | linebreaks}}</p>
</section> </section>

View File

@ -50,11 +50,11 @@
<article class="post featured"> <article class="post featured">
<header class="major"> <header class="major">
<span class="date">{{ first_event.datetime.date }}<br/>{{ first_event.datetime.time }}</span> <span class="date">{{ first_event.datetime | date:"d F Y"}}<br/>{{ first_event.datetime | time }}</span>
<h2><a href="/event/{{ first_event.pk }}">{{ first_event.name }}</a></h2> <h2><a href="/event/{{ first_event.pk }}">{{ first_event.name }}</a></h2>
<p>{{ first_event.short_description }}</p> <p>{{ first_event.short_description }}</p>
</header> </header>
<a href="#" class="image main"><img src="/media/{{ first_event.img }}" alt=""/></a> <a href="/event/{{ first_event.pk }}" class="image main"><img src="/media/{{ first_event.img.hdr }}" alt=""/></a>
<ul class="actions special"> <ul class="actions special">
<li><a href="/event/{{ first_event.pk }}" class="button large">RESERVEZ</a></li> <li><a href="/event/{{ first_event.pk }}" class="button large">RESERVEZ</a></li>
</ul> </ul>
@ -79,10 +79,10 @@
{% for event in events %} {% for event in events %}
<article> <article>
<header> <header>
<span class="date">{{ event.datetime.date }}</span> <span class="date">{{ event.datetime | date:"d F Y"}}</span>
<h2><a href="/event/{{ event.pk }}">{{ event.name }}</a></h2> <h2><a href="/event/{{ event.pk }}">{{ event.name }}</a></h2>
</header> </header>
<a href="#" class="image fit"><img src="/media/{{ event.img }}" alt=""/></a> <a href="/event/{{ event.pk }}" class="image fit"><img src="/media/{{ event.img.crop }}" alt=""/></a>
<p>{{ event.short_description }}</p> <p>{{ event.short_description }}</p>
<ul class="actions special"> <ul class="actions special">
<li><a href="/event/{{ event.pk }}" class="button">RESERVEZ</a></li> <li><a href="/event/{{ event.pk }}" class="button">RESERVEZ</a></li>

View File

@ -42,6 +42,8 @@ SHARED_APPS = (
# everything below here is optional # everything below here is optional
'django.contrib.auth', 'django.contrib.auth',
'AuthBillet',
'rest_framework', 'rest_framework',
'rest_framework.authtoken', 'rest_framework.authtoken',
'djoser', 'djoser',
@ -64,10 +66,11 @@ SHARED_APPS = (
TENANT_APPS = ( TENANT_APPS = (
# The following Django contrib apps must be in TENANT_APPS # The following Django contrib apps must be in TENANT_APPS
'django.contrib.contenttypes', 'django.contrib.contenttypes',
# your tenant-specific apps
'BaseBillet', 'BaseBillet',
'ApiBillet', 'ApiBillet',
# your tenant-specific apps
) )
INSTALLED_APPS = list(SHARED_APPS) + [app for app in TENANT_APPS if app not in SHARED_APPS] INSTALLED_APPS = list(SHARED_APPS) + [app for app in TENANT_APPS if app not in SHARED_APPS]
@ -128,6 +131,7 @@ DATABASE_ROUTERS = (
# Password validation # Password validation
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators # https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators
# AUTH_USER_MODEL = 'AuthBillet.TibilletUser'
AUTH_PASSWORD_VALIDATORS = [ AUTH_PASSWORD_VALIDATORS = [
{ {
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',