Skip to content

Commit 5331a3d

Browse files
authored
Merge pull request #135 from PythonBalkan/middleware
Middleware for fetching correct conference object based on year in domain
2 parents 337801d + a946eb5 commit 5331a3d

File tree

12 files changed

+75
-42
lines changed

12 files changed

+75
-42
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from urllib.parse import urljoin
2+
3+
from django.conf import settings
4+
from django.http import HttpResponseRedirect
5+
6+
from pyconbalkan.conference.models import Conference
7+
8+
9+
class ConferenceSelectionMiddleware:
10+
def __init__(self, get_response):
11+
self.get_response = get_response
12+
13+
def __call__(self, request):
14+
"""
15+
Code to be executed for each request before
16+
the view (and later middleware) are called.
17+
Domain format : 2019.pyconbalkan.com
18+
19+
Every request will have an atribute `conference` in it
20+
`conference` is the conference.models.Conference object for the
21+
respective year fetched from it's domain.
22+
"""
23+
24+
domain = request.META.get('HTTP_HOST', 'localhost')
25+
try:
26+
domain_year = int(domain.split('.')[0])
27+
q = {
28+
"year": domain_year
29+
}
30+
if not request.user.is_superuser:
31+
q['active'] = True
32+
33+
request.conference = Conference.objects.get(**q)
34+
except (Conference.DoesNotExist, ValueError):
35+
request.conference = Conference.objects.filter(active=True).first()
36+
37+
conference_domain = "{}.{}".format(
38+
request.conference.year,
39+
settings.META_SITE_DOMAIN
40+
)
41+
42+
if settings.DEBUG is False and conference_domain != request.META['HTTP_HOST']:
43+
return HttpResponseRedirect(
44+
urljoin(
45+
"{}://{}".format(settings.META_SITE_PROTOCOL, conference_domain
46+
), "/")
47+
)
48+
49+
return self.get_response(request)

pyconbalkan/core/context_processors.py

Lines changed: 0 additions & 9 deletions
This file was deleted.

pyconbalkan/core/templates/base.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<!--[if !IE]><!--> <html lang="en"> <!--<![endif]-->
88
<head {% meta_namespaces %} >
99
{% include "meta/meta.html" %}
10-
<title>{{ conference.event }} {{ conference.name }} {{ conference.year }}</title>
10+
<title>{{ request.conference.event }} {{ request.conference.name }} {{ request.conference.year }}</title>
1111

1212
<!-- Meta -->
1313
<meta charset="utf-8">

pyconbalkan/core/templates/includes/event_sidebar.html

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
11
{% load static %}
22

33
<aside class="event-sidebar">
4-
<a href="/" class="logo" title="{{ conference.event }} {{ conference.name }} - {{ conference.city }} {{ conference.year }}"></a>
4+
<a href="/" class="logo" title="{{ request.conference.event }} {{ request.conference.name }} - {{ request.conference.city }} {{ request.conference.year }}"></a>
55
<hr class="line">
6-
<h1>#{{ conference.number }}</h1>
6+
<h1>#{{ request.conference.number }}</h1>
77
<p class="event-sidebar__text">
8-
{{ conference.address }}, {{ conference.city }}
8+
{{ request.conference.address }}, {{ request.conference.city }}
99
</p>
1010
<p class="event-sidebar__text">
1111
<i class="event-sidebar__icon far fa-calendar-alt"></i>
12-
{{ conference.from_date }} - {{ conference.to_date }}
12+
{{ request.conference.from_date }} - {{ request.conference.to_date }}
1313
</p>
1414
<p class="event-sidebar__text">
1515
<i class="event-sidebar__icon fas fa-users"></i>
16-
{{ conference.max_attendees }} attendees
16+
{{ request.conference.max_attendees }} attendees
1717
</p>
1818
<p class="event-sidebar__text">
1919
<i class="event-sidebar__icon fas fa-globe"></i>
20-
{{ conference.get_type_display }}
20+
{{ request.conference.get_type_display }}
2121
</p>
2222

2323
<div class="event-button__wrapper">
24-
{% if conference.tickets %}
25-
<a class="button button--yellow mb-xs-20" href="{{ conference.tickets }}" target="_blank" role="button">Join Us!</a>
24+
{% if request.conference.tickets %}
25+
<a class="button button--yellow mb-xs-20" href="{{ request.conference.tickets }}" target="_blank" role="button">Join Us!</a>
2626
{% endif %}
2727
</div>
2828
<div class="social__links mb-xs-10">
29-
{% if conference.facebook %}<a href="{{ conference.facebook }}" class="facebook" target="_blank"></a>{% endif %}
30-
{% if conference.instagram %}<a href="{{ conference.instagram }}" class="instagram" target="_blank"></a>{% endif %}
31-
{% if conference.twitter %}<a href="{{ conference.twitter }}" class="twitter" target="_blank"></a>{% endif %}
29+
{% if request.conference.facebook %}<a href="{{ request.conference.facebook }}" class="facebook" target="_blank"></a>{% endif %}
30+
{% if request.conference.instagram %}<a href="{{ request.conference.instagram }}" class="instagram" target="_blank"></a>{% endif %}
31+
{% if request.conference.twitter %}<a href="{{ request.conference.twitter }}" class="twitter" target="_blank"></a>{% endif %}
3232
</div>
3333
<h3 class="supported-by">Supported by</h3>
3434
<a href="https://www.python.org/psf/"><div><img class="psf-logo" src="{% static 'img/pfs-logo.png' %}"></div></a>

pyconbalkan/core/templates/includes/header.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
</div>
2222
</li>
2323
<li class="menu__list__item">
24-
{% if conference.timetable_pdf %}
24+
{% if request.conference.timetable_pdf %}
2525
<a class="menu__list__link {% if request.path == '/timetable_pdf' %}active{% endif %}" href="/timetable_pdf" role="button">Timetable</a>
2626
{% else %}
2727
<a class="menu__list__link {% if request.path == '/timetable' %}active{% endif %}" href="{% url 'timetable' %}" role="button">Timetable</a>

pyconbalkan/core/views.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
from django.shortcuts import render
22

3-
from pyconbalkan.conference.models import Conference, CountDown, MissionStatement
3+
from pyconbalkan.conference.models import CountDown, MissionStatement
44
from pyconbalkan.speaker.models import Speaker
55
from pyconbalkan.sponsors.models import Sponsor, SponsorshipLevel
66

77

88
def home(request):
9-
conference = Conference.objects.filter(active=True)
109
count_down = CountDown.objects.filter(active=True)
1110
keynotes = Speaker.objects.filter(active=True, keynote=True).order_by('full_name')
1211

@@ -27,6 +26,6 @@ def home(request):
2726
'partners': partners,
2827
'count_down': count_down.first() if count_down else None,
2928
'mission_statement': mission_statement.first() if mission_statement else None,
30-
'meta': conference.first().as_meta(),
29+
'meta': request.conference.as_meta(),
3130
}
3231
return render(request, 'home.html', context)

pyconbalkan/news/views.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44
from meta.views import Meta
55
from rest_framework import viewsets
66

7-
from pyconbalkan.conference.models import Conference
87
from pyconbalkan.news.models import Post
98
from pyconbalkan.news.serializers import PostSerializer
10-
from pyconbalkan.organizers.models import Volunteer
119

1210

1311
class PostViewSet(viewsets.ModelViewSet):

pyconbalkan/organizers/views.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from django.shortcuts import render, get_object_or_404
22
from rest_framework import viewsets
33

4-
from pyconbalkan.conference.models import Conference
54
from pyconbalkan.organizers.forms import VolunteerCreateForm
65
from pyconbalkan.organizers.models import Volunteer
76
from pyconbalkan.organizers.serializers import VolunteerSerializer

pyconbalkan/settings.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,16 @@
6767
]
6868

6969
MIDDLEWARE = [
70+
# Django middlewares
7071
'django.middleware.security.SecurityMiddleware',
7172
'django.contrib.sessions.middleware.SessionMiddleware',
7273
'django.middleware.common.CommonMiddleware',
7374
'django.middleware.csrf.CsrfViewMiddleware',
7475
'django.contrib.auth.middleware.AuthenticationMiddleware',
7576
'django.contrib.messages.middleware.MessageMiddleware',
7677
'django.middleware.clickjacking.XFrameOptionsMiddleware',
78+
# Custom middlewares
79+
'pyconbalkan.conference.middleware.ConferenceSelectionMiddleware',
7780
]
7881

7982
ROOT_URLCONF = 'pyconbalkan.urls'
@@ -89,7 +92,6 @@
8992
'context_processors': [
9093
'django.template.context_processors.debug',
9194
'django.template.context_processors.request',
92-
'pyconbalkan.core.context_processors.conference',
9395
'django.contrib.auth.context_processors.auth',
9496
'django.contrib.messages.context_processors.messages',
9597
],

pyconbalkan/sponsors/templates/sponsoring.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ <h2 class="success-message">
6161
</div>
6262

6363
<h2 class="centered">
64-
{% if conference.sponsor_email %}
65-
For more information, contact us by email {{ conference.sponsor_email }}
64+
{% if request.conference.sponsor_email %}
65+
For more information, contact us by email {{ request.conference.sponsor_email }}
6666
{% endif %}
6767
</h2>
6868

0 commit comments

Comments
 (0)